当前位置: 首页 > 面试题库 >

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

茅星华
2023-03-14
问题内容

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

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


问题答案:

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

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

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

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

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

如果创建,请照常进行:

//rules
'email' => 'unique:users,email_address',


 类似资料:
  • 我正在尝试验证密码字段是否存在。我想允许某人编辑用户,他们可能想更改用户密码,也可能不想更改用户密码。所以我想我可以使用Laravels验证规则,特别是“有时”规则来实现这一点。我有一套规则: 例如,对于其他字段,通常会有其他规则,而对于密码,则会有更严格的规则。如果传递的数据中存在密码字段,我希望这只应用min:8规则,但是如果我将密码字段留空,则会出现一个验证错误,表明密码字段是必需的。 我不

  • As we learned earlier in the book, the validate method on a Model is called before set and save, and is passed the model attributes updated with the values from these methods. By default, where we def

  • 如何在验证器中添加密码验证规则? 验证规则: 密码包含以下五个类别中至少三个类别的字符: 英文大写字符(A–Z) 英文小写字符(a–z) 以10位数字(0–9)为基数 非字母数字(例如:!、$、#或%) Unicode字符 如何在验证器规则中添加上述规则? 我的代码在这里

  • 我们正在构建一个需要精确性的apiendpoint。我们希望对POST/PUT到服务器的参数实施严格的验证。 如果api用户发送了一个不受支持的对(例如,我们允许参数[first\u name,last\u name],并且用户包含一个不受支持的参数[country]),我们希望验证失败。 已尝试构建名为(用作)的自定义验证器,但要使其在数组中可用,必须将其应用于嵌套/子属性列表的父级(…因为我们

  • 我做了一个自定义验证规则,它迭代一个包含键

  • 我正在尝试更新一个用户,作为管理员。 我正在更改用户名,但上面说电子邮件必须是唯一的。 我该怎么解决这个问题。 这是请求类 我一直收到失败的电子邮件验证。电子邮件已经被拿走了。有什么想法吗