Laravel:使用独特的验证规则更新模型
在 Laravel 中更新模型时,通过验证确保数据完整性至关重要。然而,用户名和电子邮件等属性的独特验证规则可能会带来挑战。
问题陈述
在假设的用户模型中,用户名和电子邮件具有唯一的验证规则,使用存储库更新记录可能会触发验证错误:
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 传递给 validate 方法。
在验证器中使用参数来区分创建和更新:
在验证规则中添加一个参数,指示该操作是更新还是创建。
更新规则:
强制唯一规则忽略当前 ID:
'email' => 'unique:users,email_address,' . $userId,
创建规则:
照常进行唯一规则:
'email' => 'unique:users,email_address',
通过合并这些更改,可以在不妨碍现有记录更新的情况下强制执行唯一验证规则。
以上是## 如何在 Laravel 中使用独特的验证规则更新模型而不出现错误?的详细内容。更多信息请关注PHP中文网其他相关文章!