validation - 在更新时验证唯一的电子邮件,忽略自己的电子邮件。在 Laravel 5 上
问题描述
我有一个 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
of的用户$u->email
column_to_ignore
id
users
要解决此问题,只需更改您的unique
规则如下:
$u = User::find($id);
$rules = [
"email" => "required|email|max:128|unique:users,email,".$u->id.",id",
...
];
",id"
注意:如果您愿意,可以从规则中省略。如前所述,这将默认为users
表的主键。如果您从 更改它id
,那么您将需要指定它。
如上所述调整规则后,这意味着在编辑此用户并确定唯一条目时,忽略email
where 列中的值users.id = $u->id
。
推荐阅读
- elixir - Elixir 的 `mix format` 配置选项
- azure - Azure 上的 Bitnami SonarQube VM:无法启动 sonarqube
- android - CoordinatorLayout 在 Android Studio 3.1.3 中不起作用?
- python - 使用 Tkinter 解析时出现意外的 EOF
- amazon-web-services - 在不使用 PassRole 权限的情况下创建 Lambda 函数
- angular - 制作材料分页器时无法读取未定义的属性“页面”
- java - 实现矩阵求幂时出错
- ios - 在 Swift 中以编程方式将 UIImageView 替换为 PDFView
- rxjs - fromEvent 函数中的过滤器运算符在 RxJS6 中不起作用
- java - 使用对象列表构建树