如何验证在Laravel中更新电子邮件的用户的唯一电子邮件?

2022-08-30 11:04:47

我正在使用Laravel 5.2,并希望使用验证器更新用户帐户。

我想保持电子邮件字段唯一,但是,如果用户键入他当前的电子邮件,它将中断。如果电子邮件是唯一的,除了用户自己的当前电子邮件,我该如何更新?


答案 1

您可以告诉验证者:

'email' => 'unique:users,email_address,'.$user->id

查看“强制唯一规则忽略给定 ID”部分中的文档


答案 2

在请求类中,您可能需要在PUT或PATCH方法中进行此验证,其中您没有用户,那么您可以简单地使用此规则

 You have 2 options to do this

1:

 'email' => "unique:users,email,$this->id,id"

2:

 use Illuminate\Validation\Rule; //import Rule class 
'email' => Rule::unique('users')->ignore($this->id); //use it in PUT or PATCH method

$this->id 提供用户的 id,因为$this是请求类的对象,而请求还包含用户对象。

public function rules()
{
    switch ($this->method()) {
        case 'POST':
        {
            return [
                'name' => 'required',
                'email' => 'required|email|unique:users',
                'password' => 'required'
            ];
        }
        case 'PUT':
        case 'PATCH':
        {
            return [
                'name' => 'required',
                'email' => "unique:users,email,$this->id,id",
                                   OR
                //below way will only work in Laravel ^5.5 
                'email' => Rule::unique('users')->ignore($this->id),

               //Sometimes you dont have id in $this object
               //then you can use route method to get object of model 
               //and then get the id or slug whatever you want like below:

              'email' => Rule::unique('users')->ignore($this->route()->user->id),
            ];
        }
        default: break;
    }
}

希望它能在使用请求类时解决问题。


推荐