Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 在更新时验证唯一电子邮件,忽略自我电子邮件。关于拉威尔5号_Validation_Laravel 5 - Fatal编程技术网

Validation 在更新时验证唯一电子邮件,忽略自我电子邮件。关于拉威尔5号

Validation 在更新时验证唯一电子邮件,忽略自我电子邮件。关于拉威尔5号,validation,laravel-5,Validation,Laravel 5,我有一个Laravel 5.4应用程序,每当我试图更新一个用户的电子邮件不变,我会得到错误“电子邮件已在使用”,这是有道理的,因为编辑的用户已经有电子邮件。通常,我只是简单地使用以下方法来处理它: 'email' => 'required|max:128|unique:users,email,'.$u->email, 但是,这在这个特定的应用程序上不起作用。我仍然收到相同的“已在使用”错误 php替换字符串后,完整验证规则对象如下所示: $rules = [ "name" =&

我有一个Laravel 5.4应用程序,每当我试图更新一个用户的电子邮件不变,我会得到错误“电子邮件已在使用”,这是有道理的,因为编辑的用户已经有电子邮件。通常,我只是简单地使用以下方法来处理它:

'email' => 'required|max:128|unique:users,email,'.$u->email,
但是,这在这个特定的应用程序上不起作用。我仍然收到相同的“已在使用”错误

php替换字符串后,完整验证规则对象如下所示:

$rules = [
  "name" => "required|max:64",
  "email" => "required|max:128|unique:users,email,user@admin.com",
  "role" => "required"
]
我找不出有什么毛病。什么可能导致不正确的验证?
如果有帮助,我将添加整个更新函数验证过程

$u = User::find($id);

$input = $request->all();
$rules = [
  'name' => 'required|max:64',
  'email' => 'required|max:128|unique:users,email,'.$u->email,
  'role' => 'required'
];
$messages = [
  'email.required' => 'El Email es obligatorio',
  'email.max' => 'El Email no debe exceder los 128 caracteres',
  'email.unique' => 'Ya existe un usuario con este Email',
  'name.required' => 'El nombre es obligatorio',
  'name.max' => 'El Email no debe exceder los 64 caracteres',
  'role.required' => 'El Rol es obligatorio',
];
$validator = Validator::make($input, $rules, $messages);
if ( $validator->fails() ) {
  return redirect('users/'.$id.'/edit')->withErrors($validator)->withInput();
} else {
    // update user
}

传递
$u->email
对于
unique
规则不太合适。签名是

unique:{table},{column},{value_to_ignore},{column_to_ignore}
所以,将您的规则设置为

unique:users,email,'.$u->email
由于默认的
列被设置为
id
(或
users
表的主键是什么),它正在尝试查找id为
u->email
的用户

要解决此问题,只需按如下所示更改您的
unique
规则:

$u = User::find($id);
$rules = [
    "email" => "required|email|max:128|unique:users,email,".$u->id.",id", 
    ...
];
注意:如果愿意,可以从规则中省略
,id“
。如上所述,这将默认为
users
表的主键。如果您将其从
id
更改,则需要指定它


如上所述调整规则后,这将意味着在编辑此用户并确定唯一条目时,忽略
email
列中的值,其中
users.id=$u->id
传递
$u->email
对于
unique
规则不太合适。签名是

unique:{table},{column},{value_to_ignore},{column_to_ignore}
所以,将您的规则设置为

unique:users,email,'.$u->email
由于默认的
列被设置为
id
(或
users
表的主键是什么),它正在尝试查找id为
u->email
的用户

要解决此问题,只需按如下所示更改您的
unique
规则:

$u = User::find($id);
$rules = [
    "email" => "required|email|max:128|unique:users,email,".$u->id.",id", 
    ...
];
注意:如果愿意,可以从规则中省略
,id“
。如上所述,这将默认为
users
表的主键。如果您将其从
id
更改,则需要指定它

如上所述调整规则后,这意味着在编辑此用户并确定唯一条目时,忽略
email
列中的值,其中
users.id=$u->id