如何在Form Request中传入待更新用户ID以忽略同用户验证?
Laravel更新用户时排除自身的唯一验证实现
要解决更新用户时username和studentNumber字段的唯一验证排除自身的问题,你可以通过Form Request访问路由参数的方式获取当前待更新用户的ID,具体实现步骤如下:
1. 利用路由参数获取用户ID
你的UserController的update方法接收路由中的$id参数(对应路由规则应该类似users/{id}),在UpdateUserRequest中可以直接通过$this->route('id')获取这个ID值。
2. 修改Form Request的验证规则
将Rule::unique的ignore参数替换为$this->route('id'),这样验证规则会自动排除当前ID对应的用户,避免更新时和自身数据冲突。
修改后的UpdateUserRequest.php代码:
public function rules(): array { return [ 'username' => [ Rule::unique('users')->ignore($this->route('id')), 'string', 'max:255' ], 'studentNumber' => [ Rule::unique('users')->ignore($this->route('id')), 'string' ], ]; }
补充说明
- 如果你的路由参数名不是
id(比如是user),只需把$this->route('id')改成对应的参数名即可,比如$this->route('user')。 - 若使用Laravel模型绑定(控制器方法参数为
User $user),也可以通过$this->route('user')->id获取用户ID,效果一致。
内容的提问来源于stack exchange,提问作者aasem shoshari
相关产品推荐
相关产品推荐

