一尘不染

具有属性唯一验证规则的Laravel更新模型

php

我有一个laravel
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."]}

有没有办法优雅地解决这个问题?


阅读 455

收藏
2020-05-29

共1个答案

一尘不染

id当前正在更新的实例的追加到验证器。

  1. 传递id实例的来忽略唯一的验证器。

  2. 在验证器中,使用参数来检测您是否正在 更新创建 资源。

如果进行更新,则强制唯一规则忽略给定的id:

//rules
'email' => 'unique:users,email_address,' . $userId,

如果创建,请照常进行:

//rules
'email' => 'unique:users,email_address',
2020-05-29