首页 > 解决方案 > 表单验证器唯一用户名失败

问题描述

我在检测唯一用户名时遇到了困难。我的意思是它确实可以检测用户名,但如果请求输入用户名与数据库中该用户的当前用户名匹配,我想排除用户名验证。

目前,我得到:用户名已被占用。尽管它的用户名与该用户在数据库中的用户名相同。

谢谢!

规则

    protected $rules = [
        'username'  => 
 'nullable|string|alpha_dash|max:255|regex:/(^([a-zA-Z]+)(\d+)?$)/u|unique:users',
        'first_name' => 'nullable|max:150',
     'last_name' => 'nullable|max:150', 
      'location' => 'nullable|max:200', 
      'password' => 'confirmed'
    ];

编辑个人资料 POST 方法:


$validator = Validator::make($request->all(), $this->rules);

        if ($validator->fails()) {
            return \redirect()->back()->withErrors($validator->getMessageBag()->toArray())->withInput($request->except('image'));
        } else {
            $model = \App\User::find(\Auth::user()->id);

标签: phplaravellaravel-validation

解决方案


更新时,您可以忽略该字段:

'username'  => 
 'nullable|string|alpha_dash|max:255|regex:/(^([a-zA-Z]+)(\d+)?$)/u|unique:users,' . $user->id,

或者,

'username' => [
   'nullable',
   'string',
   Rule::unique('users')->ignore($user->id),
],

您可以将不同的列名作为第二个参数传递给 unique 方法:

Rule::unique('users', 'username')->ignore($user->id),

您还可以通过使用 where 方法自定义查询来指定其他查询约束。例如 :

Rule::unique('users')->where(function ($query) {
    return $query->where('username', '!=',  $request->username);
})

推荐阅读