Laravel控制器中如何用数组判断银行余额并实现钱包充值
实现银行余额校验的钱包充值逻辑
完整控制器方法代码
public function loadPettyCash(Request $request) { // 计算各银行总余额并整理为以bank_id为键的关联数组,方便快速查找 $banks_totals = Bank::all()->mapWithKeys(function ($bank) { $total = BankingTransactions::where('bank', $bank->id)->sum('amount'); return [$bank->id => [ 'name' => $bank->name, 'amount' => $total ]]; })->toArray(); // 提取请求中的核心参数 $petty_load = $request->all(); $target_bank_id = $petty_load['bank']; $recharge_amount = $petty_load['amount']; // 校验所选银行的余额是否充足 if (!isset($banks_totals[$target_bank_id]) || $banks_totals[$target_bank_id]['amount'] < $recharge_amount) { return response()->json([ 'message' => '所选银行余额不足', 'alert' => 'error' ], 400); } // 余额充足时执行钱包充值操作 PettyCash::create([ 'amount' => $recharge_amount, 'user_id' => auth()->id(), // 修正原代码笔误,实际项目中通常用auth()获取当前登录用户ID 'bank_id' => $target_bank_id ]); return response()->json([ 'message' => 'Petty loaded successfully', 'alert' => 'success' ]); }
关键逻辑说明
- 数组结构优化:将原代码的索引数组转换为以
bank_id为键的关联数组,避免遍历查找,提升校验效率。 - 余额校验逻辑:先判断请求的银行ID是否存在于余额数组中,再对比余额与充值金额,任一条件不满足则直接返回错误响应。
- 参数修正:将原代码中的
doe()->id修正为auth()->id(),这是Laravel项目中获取当前登录用户ID的标准写法,推测原代码为拼写失误。
内容的提问来源于stack exchange,提问作者kennie
相关产品推荐
相关产品推荐

