如何在Jetstream用户资料更新表单中同步更新User、Business、Bank表数据
实现三张表同步更新的修改步骤
步骤1:引入关联模型
首先在app/Actions/Fortify/UpdateUserProfileInformation.php文件头部引入Business和Bank模型:
use App\Models\Business; use App\Models\Bank;
步骤2:扩展验证规则
在update方法的Validator验证部分,新增Business、Bank表对应字段的校验规则,可根据实际业务需求调整规则:
Validator::make($input, [ // 原有User表字段规则 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)], 'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'], 'username' => ['required', 'string', 'max:255', Rule::unique('users')->ignore($user->id)], 'lname' => ['required', 'string', 'max:255'], 'phone' => ['required', 'string', 'max:20'], 'cell' => ['required', 'string', 'max:20'], 'persnl_add1' => ['required', 'string', 'max:255'], 'city' => ['required', 'string', 'max:100'], 'province' => ['required', 'string', 'max:100'], 'country' => ['required', 'string', 'max:100'], // 新增Business表字段验证 'bsns_name' => ['required', 'string', 'max:255'], 'bsns_add1' => ['required', 'string', 'max:255'], 'bsns_city' => ['required', 'string', 'max:100'], 'bsns_province' => ['required', 'string', 'max:100'], 'bsns_country' => ['required', 'string', 'max:100'], // 新增Bank表字段验证 'branch_code' => ['required', 'string', 'max:50'], 'bank_name' => ['required', 'string', 'max:255'], 'acc_no' => ['required', 'string', 'max:100'], 'acc_title' => ['required', 'string', 'max:255'], ])->validateWithBag('updateProfileInformation');
步骤3:新增关联表更新逻辑
在User表更新完成后,追加Business和Bank表的更新代码,两种更新场景都需要补充逻辑:
普通更新场景(else分支内)
在$user->forceFill(...)->save();之后添加以下代码:
// 更新Business表数据 Business::where('user_id', $user->user_id)->update([ 'bsns_name' => $input['bsns_name'], 'bsns_add1' => $input['bsns_add1'], 'bsns_add2' => $input['bsns_add2'] ?? null, 'bsns_city' => $input['bsns_city'], 'bsns_province' => $input['bsns_province'], 'bsns_country' => $input['bsns_country'], ]); // 更新Bank表数据 Bank::where('user_id', $user->user_id)->update([ 'branch_code' => $input['branch_code'], 'bank_name' => $input['bank_name'], 'acc_no' => $input['acc_no'], 'acc_title' => $input['acc_title'], ]);
邮箱需重新验证场景(updateVerifiedUser方法内)
原方法仅更新了姓名、邮箱字段,需要补全所有User字段以及两张关联表的更新逻辑:
protected function updateVerifiedUser($user, array $input) { $user->forceFill([ 'username' => $input['username'], 'name' => $input['name'], 'lname' => $input['lname'], 'email' => $input['email'], 'phone' => $input['phone'], 'cell' => $input['cell'], 'persnl_add1' => $input['persnl_add1'], 'persnl_add2' => $input['persnl_add2'] ?? null, 'city' => $input['city'], 'province' => $input['province'], 'country' => $input['country'], 'web' => $input['web'] ?? null, 'email_verified_at' => null, ])->save(); // 更新Business表数据 Business::where('user_id', $user->user_id)->update([ 'bsns_name' => $input['bsns_name'], 'bsns_add1' => $input['bsns_add1'], 'bsns_add2' => $input['bsns_add2'] ?? null, 'bsns_city' => $input['bsns_city'], 'bsns_province' => $input['bsns_province'], 'bsns_country' => $input['bsns_country'], ]); // 更新Bank表数据 Bank::where('user_id', $user->user_id)->update([ 'branch_code' => $input['branch_code'], 'bank_name' => $input['bank_name'], 'acc_no' => $input['acc_no'], 'acc_title' => $input['acc_title'], ]); $user->sendEmailVerificationNotification(); }
注意事项
- 确保
Business和Bank模型里的对应字段都在$fillable属性中声明,避免批量赋值错误 - 非必填字段需加
?? null处理未传值的情况 - 如果已在User模型中定义了
business和bank的关联关系,可直接用关联方法更新:$user->business()->update([...]),写法更简洁 - 请确保前端资料更新表单已新增Business、Bank对应字段的输入项,字段名和后端接收的
$input键名保持一致
内容的提问来源于stack exchange,提问作者Hashir
相关产品推荐
相关产品推荐

