如何在验证期间忽略给定的id

时间:2018-05-18 16:39:22

标签: laravel laravel-5 laravel-5.4

  

不要对这个问题投下来,我知道之前有人问过,但是,我   找不到任何有效的答案!

我正在尝试使用唯一的电子邮件,但在验证期间忽略给定的ID。 尝试了几种方法来完成这项工作,其中有两种方法尚未实现,但没有成功:

Validator::make($request->all(), [
     'username' => ['username', Rule::unique('user', 'username')->ignore($user->id)]
]);
另一个:

'username' => 'required|max:30,',
Rule::unique('user')->ignore($user->id),

感谢和帮助。

这是一些更多的信息,以防你认为最好的例子应该是明确的工作。 形式:

<input type="text" name="username" class="formClasses" id="usernameLocal"
 value="{{ Auth::user()->username }}">

控制器:

public function saveUserChanges(Request $request){

    $user = Auth::user();

    $this->validate($request, [
        'username' => 'required|max:30,',
        Rule::unique('user')->ignore($user->id)
    ]);

    $user->username = $request['username'];

    $user->update();

    return redirect()->route('userProfil', $user->userprofile->slug);
}

1 个答案:

答案 0 :(得分:1)

如果您尝试保证唯一的电子邮件,则规则如下:

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

如果您的字段在用户表格中不是email,请执行以下操作:

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

最后,如果用户表上的唯一ID不是id,请执行:

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

要直接使用您的代码,它将如下所示:

$this->validate($request, [
        'username' => [
            'required',
            'max:30',
            Rule::unique('users')->ignore($user->id)
        ]
    ]);

我所做的更改是必需的和最大规则需要分开,并且所有规则都需要在数组中。我还将表从user更改为users,因为这是Laravel的默认值。

请参阅https://laravel.com/docs/master/validation#rule-unique

上的文档