Laravel多列求和问题:如何对计算出的总成本再次求和
搞定总成本二次求和的方案
嘿,我看你现在需要在现有函数的基础上,对已经算出的每行总成本再做一次总和计算,这事儿在Laravel里其实挺简单的,给你两种实用的方法:
方法一:一步到位,数据库层面同时算明细和总合计
最省心高效的方式是让数据库直接帮你完成每行成本计算+总求和,尤其是数据量大的时候,能省不少内存开销。我补全了你代码里省略的部分(假设particulars表有unit_price字段,reqs表有quantity字段,毕竟要算成本肯定得这俩):
public function getUsageData(Request $request) { $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); // 先拉取带每行总成本的明细数据 $usageDetails = DB::table('particulars') ->join('reqs', 'particulars.particular_id', '=', 'reqs.particular_id') ->whereBetween('date_issued', [$start_date, $end_date]) ->select( 'particulars.item_name', 'particulars.unit_price', 'reqs.quantity', // 计算当前行的总成本 DB::raw('(particulars.unit_price * reqs.quantity) as total_cost') ) ->get(); // 用**Laravel集合的sum方法**直接对所有行的total_cost求和 $totalOverallCost = $usageDetails->sum('total_cost'); // 这里可以根据你的需求返回数据,比如返回明细+总合计 return response()->json([ 'item_details' => $usageDetails, 'total_total_cost' => $totalOverallCost ]); }
方法二:如果已经有了每行的总成本结果,直接求和
要是你已经通过其他方式拿到了包含total_cost字段的结果集合,那直接调用sum方法就行,不用再写复杂逻辑:
// 假设$yourExistingResults是已经包含每行total_cost的集合 $totalSum = $yourExistingResults->sum('total_cost');
额外优化:直接查总合计(不需要明细的情况)
如果有时候你只需要总合计,不需要每行的明细,那可以直接让数据库聚合计算,速度更快:
$totalOverallCost = DB::table('particulars') ->join('reqs', 'particulars.particular_id', '=', 'reqs.particular_id') ->whereBetween('date_issued', [$start_date, $end_date]) ->select(DB::raw('SUM(particulars.unit_price * reqs.quantity) as total')) ->value('total');
这样不管是要明细还是要总合计,都能完美解决你的需求啦~
内容的提问来源于stack exchange,提问作者timah
相关产品推荐
相关产品推荐

