Laravel 检查唯一规则,而无需更新

2022-08-30 10:56:25

我在更新部分中具有唯一的验证规则。

在插入或添加唯一规则时,它将检查唯一的coloumn。'Email' => array('unique:driver_details'),

但对于更新部分,此操作将失败。在更新它时,它满足其他规则,并且在电子邮件的唯一性中,它正在检查自己是否具有唯一的coloumn,并且它失败了,但看到了自己的字段。

那么,除了数据库中的自身值外,我该如何检查唯一值?


答案 1

这将强制忽略特定的 id:

'email' => 'unique:table,email_column_to_check,id_to_ignore'

在上面的示例中替换段 ,tableemail_column_to_checkid_to_ignore

你可以在这里检查 http://laravel.com/docs/4.2/validation#rule-unique


答案 2

对于使用 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')
            ],
            //...
        ];
    }
    //...
}

请注意,我们忽略了正在编辑的用户,在这种情况下,该用户可能与经过身份验证的用户不同。


推荐