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

时间:2017-12-22 11:47:36

标签: laravel validation laravel-5 laravel-5.4 laravel-validation

我有一个用户表,其中包含有关电子邮件和用户名的唯一验证规则。当我尝试更新时不忽略唯一验证。请参阅下面的代码。

UserRequest.php

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

5 个答案:

答案 0 :(得分:2)

请试试这个

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,
    ];
}

答案 1 :(得分:2)

在laravel 5.5中你应该这样做:

use Illuminate\Validation\Rule;

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

检查关于 rule-unique 的laravel文档。

答案 2 :(得分:0)

如果您确认更新,则需要跳过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中,您在3rd规则

中提供了4thunique参数
unique:table,column,except,idColumn

答案 3 :(得分:0)

您可以使用以下内容:

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

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

在与return

一致之前

答案 4 :(得分:0)

对于其他人来说,遇到此问题:

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,
            ];
  }