Laravel:使用唯一的验证规则更新模型
在 Laravel 中,在模型更新期间验证字段对于确保数据完整性至关重要。但是,在更新现有记录时,唯一的验证规则可能会导致问题。
请考虑 Repository 类中的以下代码:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray());
$user->save();
return $user;
}
此代码尝试重新验证模型的字段,包括“用户名”和“电子邮件”等唯一字段。但是,当尝试使用现有唯一值更新记录时,此方法可能会导致验证错误。
要解决此问题,我们需要从验证中排除当前记录,以允许在不违反唯一约束的情况下进行更新。我们可以通过将正在更新的实例的 id 附加到验证器来实现这一点。具体方法如下:
传递实例的 id:
将正在更新的实例的 id 传递给更新方法:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray(), ['id' => $id]);
$user->save();
}
从验证中排除当前记录:
在验证器中,我们使用 id 参数来检测是否正在更新或创建资源:
更新: 对于唯一验证规则,将 ,{$id} 附加到规则以排除当前记录。例如:
'email' => 'unique:users,email,{$id}',
创建:对于唯一验证规则,请勿包含 id。例如:
'email' => 'unique:users,email',
按照以下步骤,我们可以优雅地更新 Laravel 模型,同时确保遵守独特的验证约束。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3