Laravel:使用唯一的验证规则更新模型
在 Laravel 中,模型更新期间验证字段对于确保数据完整性至关重要。但是,更新现有记录时,唯一的验证规则可能会导致问题。
请考虑 Repository 类中的以下代码:
<code class="php">public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }</code>
此代码尝试重新验证模型的字段,包括诸如“用户名”和“电子邮件”。但是,当尝试使用现有唯一值更新记录时,此方法可能会导致验证错误。
要解决此问题,我们需要从验证中排除当前记录,以允许在不违反唯一约束的情况下进行更新。我们可以通过将正在更新的实例的 id 附加到验证器来实现这一点。具体方法如下:
传递实例的 id:
将正在更新的实例的 id 传递给更新方法:
<code class="php">public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray(), ['id' => $id]); $user->save(); }</code>
从验证中排除当前记录:
在验证器中,我们使用 id 参数来检测是否正在更新或创建资源:
更新: 对于唯一验证规则,将 ,{$id} 附加到规则以排除当前记录。例如:
<code class="php">'email' => 'unique:users,email,{$id}',</code>
创建: 对于唯一验证规则,请勿包含 id。例如:
<code class="php">'email' => 'unique:users,email',</code>
通过遵循这些步骤,我们可以优雅地更新 Laravel 模型,同时确保遵守唯一的验证约束。
以上是如何使用唯一的验证规则更新 Laravel 模型而不出现错误?的详细内容。更多信息请关注PHP中文网其他相关文章!