You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:54:04