我有一个包含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'],
]);
}
答案 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)],
]);
}