仅在未更改的情况下验证

时间:2020-09-13 19:10:31

标签: laravel

我有一个包含4个字段的用户设置表格-名字和姓氏,出生日期和用户名。用户名是数据库中的唯一字段。我遇到的问题是,当我已经设置了用户名,但是之后要更新姓氏或名字时,它总是会抛出一个错误,提示用户名已被使用。我可以以某种方式检查用户名是否未更改以验证它吗?只是为了验证其他字段?

public function update(Request $request)
{
    $user = Auth::user();
    $this->portfolioValidator($request->all())->validate();

    $user->username = $request->username;
    $user->contact->first_name = $request->first_name;
    $user->contact->last_name = $request->last_name;
    $user->contact->save();

    $user->save();

    return response()->json(['message' => 'The changes have been saved'], 201);
}

protected function portfolioValidator(array $data)
{
    return Validator::make($data, [
        'first_name' => ['required', 'string'],
        'last_name' => ['required', 'string'],
        'username' => ['required', 'string', 'min:4', 'max:30', 'unique:users'],
    ]);
}

1 个答案:

答案 0 :(得分:1)

您可以按照here的说明更新unique规则以忽略当前用户:

use Illuminate\Validation\Rule;

protected function portfolioValidator(array $data)
{
    return Validator::make($data, [
        'first_name' => ['required', 'string'],
        'last_name' => ['required', 'string'],
        'username' => ['required', 'string', 'min:4', 'max:30', Rule::unique('users')->ignore(Auth::user()->id)],
    ]);
}