【问题标题】:Validate unique email on update, ignoring self email. On Laravel 5在更新时验证唯一的电子邮件,忽略自己的电子邮件。在 Laravel 5 上
【发布时间】:2018-09-15 04:40:26
【问题描述】:

我有一个 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
}

【问题讨论】:

    标签: validation laravel-5


    【解决方案1】:

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

    unique:{table},{column},{value_to_ignore},{column_to_ignore}
    

    所以,你的规则设置为

    unique:users,email,'.$u->email
    

    由于默认的column_to_ignore 设置为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

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2016-03-09
      • 1970-01-01
      • 2012-10-22
      • 2012-07-30
      • 2015-03-24
      相关资源
      最近更新 更多