Laravel 5.4 验证请求,如何处理更新时的唯一验证?

Laravel 5.4 Validation Request , How to handle unique validation on update?

我有一个用户 table,它对电子邮件和用户名有唯一的验证规则。当我尝试更新时不要忽略唯一验证。请在下面查看我的代码。

UserRequest.php

public function rules()
{
    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];
}

如果您验证更新,则需要跳过 id,如下所示

public function rules($id='')
{
    $id = $id ? ','.$id.',id':'';
    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];
}

在 Laravel docs 中,您在 unique 规则

中提供了 3rd4th 参数
unique:table,column,except,idColumn

你可以使用这样的东西:

$id = $this->isMethod('put') ? ',' . auth()->id() : '';

假设您使用 put 方法进行更新

return

行之前

请试试这个

public function rules()
{

    $id = $this->request->get('id') ? ',' . $this->request->get('id') : '';

    return [
        'name' => 'required',
        'mobile' => 'required',
        'email' => 'required|unique:users,email'.$id,
        'usercategory' => 'required',
        'username' => 'required|unique:users,username'.$id,
    ];
}

在 laravel 5.5 你应该这样做:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

查看 laravel 有关 rule-unique 的文档。

其他人遇到了这个问题:

public function rules()
 {
    return [
    'name' => 'required',
    'mobile' => 'required',
    'email' => 'required|unique:users,email'.$this->user->id,
    'usercategory' => 'required',
    'username' => 'required|unique:users,username'.$this->user->id,
            ];
  }

我用这个解决了这个问题:

public function rules()
{
    $id = $this->user->id ?? null;

    return [
        "name" => "required",
        "mobile" => "required",
        "email" => "required|unique:users,email, $id",
        "usercategory" => "required",
        "username" => "required|unique:users,username, $id",
    ];
}

请注意,对于除User模型以外的其他模型,$this->user->id中的user将是小写的模型名称