Laravel 获取在表单请求中更新的用户 ID,以在更新同一用户时忽略验证

问题描述 投票:0回答:1

更新特定用户时,我想对字段

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'],

        ];
    }
laravel laravel-validation
1个回答
0
投票

为什么不先验证然后尝试更新?

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());
    ...
© www.soinside.com 2019 - 2024. All rights reserved.