如何验证在Laravel中更新电子邮件的用户的唯一电子邮件?
2022-08-30 11:04:47
我正在使用Laravel 5.2,并希望使用验证器更新用户帐户。
我想保持电子邮件字段唯一,但是,如果用户键入他当前的电子邮件,它将中断。如果电子邮件是唯一的,除了用户自己的当前电子邮件,我该如何更新?
我正在使用Laravel 5.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;
}
}
希望它能在使用请求类时解决问题。