更新特定用户时,我想对字段
unique
和 username
运行 studentNumber
验证,但针对其他用户,而不是针对正在更新的同一用户,因为它已经归他们所有,如果我仅使用 unique:users
,它就会更新时会导致错误,因为它会对用户本身运行验证,所以我使用 Rule::unique('users')->ignore($user->id)
忽略正在更新的用户,但我需要将正在更新的用户的 id
传递给 Form Request
,如何做到这一点?
UserController.php
public function update(UpdateUserRequest $request, string $id)
{
try{
DB::table('users')->where('id',$id)->update($request->validated());
}catch(Exception $ex){
return response()->json(['message' => $ex->getMessage()], 409);
}
}
UpdateUserRequest.php
public function rules(): array
{
return [
'username' => [ Rule::unique('users')->ignore($user->id), 'string', 'max:255'],
'studentNumber' => [ Rule::unique('users')->ignore($user->id), 'string'],
];
}
为什么不先验证然后尝试更新?
public function update(UpdateUserRequest $request, string $id)
{
$validator = Validator::make($request->all(), [
'username' => [
'required',
Rule::unique('users')->ignore($id),
],
'studentNumber' => [
'required',
Rule::unique('users')->ignore($id),
],
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
$user = User::findOrFail($id);
$user->update($request->validated());
...