我正在以这种方式进行验证。
$rules = [
'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this>get('example_id').',example_id'
];
return $rules;
但是,我没有获得成功。
该错误表明
电子邮件已经存在
我想要的是,如果电子邮件已经存在并且来自同一用户,则不需要通知该电子邮件已经存在。
我不知道我的代码出了什么问题。
答案 0 :(得分:2)
您可以使用
keydown
应将ID替换为用于唯一检查的表的主键列名称。 {$ id}应该在'email' => "required|email|unique:users,email,{$id},id",
数组之前定义,例如:
$rules
答案 1 :(得分:1)
有时,您可能希望在唯一检查期间忽略给定的ID。
例如,考虑一个包含用户名,电子邮件地址和位置的“更新配置文件” 屏幕。当然,您将需要验证电子邮件地址是否唯一。
但是,如果用户仅更改名称字段而不是电子邮件字段,则您不希望引发验证错误,因为用户已经是电子邮件地址的所有者。
您可以这样使用:
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
答案 2 :(得分:0)
尝试一下
'email' => Rule::unique('users')->ignore($user->id, 'user_id');
Read Under the Section Forcing A Unique Rule To ignore A given Field
答案 3 :(得分:0)
只需使用
$this->route('example_id')
代替
$this>get('example_id')
如果您使用资源路由,则使用$ this-> route('user')。
$rules = [
'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this->route('example_id').',example_id'
];
return $rules;
答案 4 :(得分:0)
尝试这种方式
$rules = [
'email'=> ['required', 'email', \Illuminate\Validation\Rule::unique('tab_example', 'email')->whereNot('example_id',$this->get('example_id'))]
];