我有一个laravel User模型,该模型在username和上具有唯一的验证规则email。在我的存储库中,当我更新模型时,我将重新验证字段,以使所需的规则验证没有问题:
User
username
email
public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }
测试失败
ValidationException: {"username":["The username has already been taken."],"email":["The email has already been taken."]}
有没有办法优雅地解决这个问题?
将id当前正在更新的实例的追加到验证器。
id
传递id实例的来忽略唯一的验证器。
在验证器中,使用参数来检测您是否正在 更新 或 创建 资源。
如果进行更新,则强制唯一规则忽略给定的id:
//rules 'email' => 'unique:users,email_address,' . $userId,
如果创建,请照常进行:
//rules 'email' => 'unique:users,email_address',