Laravel 检查唯一规则,而无需更新
2022-08-30 10:56:25
我在更新部分中具有唯一的验证规则。
在插入或添加唯一规则时,它将检查唯一的coloumn。'Email' => array('unique:driver_details'),
但对于更新部分,此操作将失败。在更新它时,它满足其他规则,并且在电子邮件的唯一性中,它正在检查自己是否具有唯一的coloumn,并且它失败了,但看到了自己的字段。
那么,除了数据库中的自身值外,我该如何检查唯一值?
我在更新部分中具有唯一的验证规则。
在插入或添加唯一规则时,它将检查唯一的coloumn。'Email' => array('unique:driver_details'),
但对于更新部分,此操作将失败。在更新它时,它满足其他规则,并且在电子邮件的唯一性中,它正在检查自己是否具有唯一的coloumn,并且它失败了,但看到了自己的字段。
那么,除了数据库中的自身值外,我该如何检查唯一值?
这将强制忽略特定的 id:
'email' => 'unique:table,email_column_to_check,id_to_ignore'
在上面的示例中替换段 ,tableemail_column_to_checkid_to_ignore
对于使用 Laravel 5 和表单请求的用户,您可以直接获取路由模型绑定的 id 作为表单请求的属性,然后使用它从唯一规则中忽略它。$this->name_of_the_model->id
例如,如果您希望拥有唯一的电子邮件,但也允许管理员编辑用户,则可以执行以下操作:
路线:
Route::patch('users/{user}', 'UserController@update');
控制器:
public function update(UserRequest $request, User $user)
{
// ...
}
表格要求:
class UserRequest extends FormRequest
{
// ...
public function rules()
{
return [
'name' => 'required|string',
'email' => [
'required',
'email',
Rule::unique('users')->ignore($this->user()->id, 'id')
],
//...
];
}
//...
}
请注意,我们忽略了正在编辑的用户,在这种情况下,该用户可能与经过身份验证的用户不同。