Laravel多字段用户银行信息存储问题及代码修改请求
Laravel多商户平台银行提现字段存储修复方案
问题背景
开发类似Shutterstock的Laravel多商户图片交易平台时,在提现配置页(withdrawals-configure.blade.php)新增了Bank Code、Branch Code、Account Number、Account Name四个输入字段,但DashboardController的withdrawalConfigure方法无法将这些新字段的数据存入users表,需要调整代码实现数据的存储与更新。
前置准备:数据库字段添加
首先需要在users表中新增对应字段,可通过迁移文件实现:
Schema::table('users', function (Blueprint $table) { $table->string('bank_code', 4)->nullable(); $table->string('branch_code', 4)->nullable(); $table->string('ac_num')->nullable(); $table->string('ac_name')->nullable(); });
执行迁移命令:
php artisan migrate
模型批量赋值配置
修改app/Models/User.php,将新增字段加入$fillable数组,允许Laravel批量赋值:
protected $fillable = [ // 保留原有字段... 'bank', 'bank_code', 'branch_code', 'ac_num', 'ac_name', // 其他字段... ];
控制器方法修改
更新DashboardController.php中的withdrawalConfigure方法,新增字段验证规则并完善保存逻辑:
public function withdrawalConfigure() { if ($this->request->type != 'paypal' && $this->request->type != 'bank') { return redirect('user/dashboard/withdrawals/configure')->withError(__('misc.error')); } // PayPal提现逻辑(保持原有代码) if ($this->request->type == 'paypal') { $rules = [ 'email_paypal' => 'required|email|confirmed', ]; $this->validate($this->request, $rules); $user = User::find(auth()->id()); $user->paypal_account = $this->request->email_paypal; $user->payment_gateway = 'PayPal'; $user->save(); return redirect('user/dashboard/withdrawals/configure')->withSuccess(__('admin.success_update')); } else if ($this->request->type == 'bank') { // 更新验证规则,包含新增字段 $rules = [ 'bank' => 'required', 'bank_code' => 'required|max:4', 'branch_code' => 'required|max:4', 'ac_num' => 'required', 'ac_name' => 'required', ]; $this->validate($this->request, $rules); $user = User::find(auth()->id()); // 赋值所有银行相关字段 $user->bank = $this->request->bank; $user->bank_code = $this->request->bank_code; $user->branch_code = $this->request->branch_code; $user->ac_num = $this->request->ac_num; $user->ac_name = $this->request->ac_name; $user->payment_gateway = 'Bank'; $user->save(); return redirect('user/dashboard/withdrawals/configure')->withSuccess(__('admin.success_update')); } }
表单优化(可选)
原新增字段使用<textarea>不符合短文本输入场景,建议改为<input type="text">提升体验:
<div class="form-floating mb-3"> <!-- Bank Code --> <input type="text" class="form-control" placeholder="Bank Code" name="bank_code" id="input-bank_code" maxlength="4" value="{{ auth()->user()->bank_code }}"> <label for="input-bank_code">Bank Code</label> </div> <div class="form-floating mb-3"> <!-- Branch Code --> <input type="text" class="form-control" placeholder="Branch Code" name="branch_code" id="input-branch_code" maxlength="4" value="{{ auth()->user()->branch_code }}"> <label for="input-branch_code">Branch Code</label> </div> <div class="form-floating mb-3"> <!-- Account Number --> <input type="text" class="form-control" placeholder="Account Number" name="ac_num" id="input-ac_num" value="{{ auth()->user()->ac_num }}"> <label for="input-ac_num">Account Number</label> </div> <div class="form-floating mb-3"> <!-- Account Name --> <input type="text" class="form-control" placeholder="Account Name" name="ac_name" id="input-ac_name" value="{{ auth()->user()->ac_name }}"> <label for="input-ac_name">Account Name</label> </div>
内容的提问来源于stack exchange,提问作者Malindu
相关产品推荐
相关产品推荐

