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

How to Ignore given id during validation

Do not down vote this question, I know it has been asked before but, I couldn't find any with working answer!

我正在尝试使用唯一的电子邮件,但在验证过程中忽略了给定的 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);
}

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

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

如果您的字段不在您的用户 email table 中,则执行此操作:

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

最后,如果您在用户 table 上的唯一 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)
        ]
    ]);

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

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

中的文档