在Laravel中如何访问数组对象并对分组后的amount_granted字段求和
Laravel 按月度分组统计累计放贷总额解决方案
错误原因说明
你出现undefined offset 1报错的核心原因是:Laravel Eloquent查询返回的是Collection实例而非普通PHP数组,直接使用数字下标访问分组后的集合时,若索引不连续就会触发该错误。
方案1(推荐使用):SQL层面直接完成分组统计
直接在数据库查询阶段完成分组和求和计算,性能远高于取出全量数据后在PHP层面处理,代码如下:
$loanmcount2 = Loan::selectRaw('MONTH(date_release) as month, SUM(amount_granted) as total') ->where('invalid', false) ->where('transaction_year', $transyear) ->groupBy('month') ->get() // 直接将结果转为「月份为键、总额为值」的数组 ->pluck('total', 'month') ->toArray(); return view('src/modules-crud', compact('loanmcount2'));
该方案输出的数组结构完全匹配你期望的格式,转为JSON后就是你需要的{"9":"10000","5":"30000"...}效果。
方案2:在现有Collection基础上统计
如果你需要保留原分组的明细数据,同时需要统计月度总额,直接使用Collection自带的sum方法即可,不需要手动访问下标:
$loanAmountbyMonth = Loan::select('date_release','amount_granted') ->where('invalid',false) ->where('transaction_year', $transyear) ->get() ->groupBy(function($date) { return Carbon::parse($date->date_release)->format('m'); }); $loanmcount2 = []; foreach ($loanAmountbyMonth as $key => $value) { // 直接对分组内的amount_granted字段求和 $loanmcount2[(int)$key] = (string)$value->sum('amount_granted'); } return view('src/modules-crud',compact('loanmcount2'));
内容的提问来源于stack exchange,提问作者Eli
相关产品推荐
相关产品推荐

