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

Laravel中如何获取关联内line_total总和并展示在订单主信息层级

方案1:基于查询结果集合计算(适合已加载全部订单明细的场景)

拿到查询结果后直接调用集合的sum方法计算明细行总金额,代码改动最小:

$order = $this->model
    ->select('orderNumber','orderNumber as order_id','orderDate as order_date','status')
    ->where('orderNumber','=',$id)
    ->with(array('OrderDetail'=>function($query){ 
        $query->select('productCode','orderNumber','priceEach as unit_price',DB::raw('quantityOrdered*priceEach as line_total'));
    }))
    ->with('customer')
    ->first()
    ->makeHidden(['orderNumber']);

// 追加订单总金额字段
$order->order_total = $order->OrderDetail->sum('line_total');

return $order;

方案2:SQL层面直接关联计算总和(性能更优)

使用Laravel的withSum方法直接在查询阶段计算总金额,不需要依赖已加载的明细数据,数据量较大时性能更好:

return $this->model
    ->select('orderNumber','orderNumber as order_id','orderDate as order_date','status')
    ->where('orderNumber','=',$id)
    ->with(array('OrderDetail'=>function($query){ 
        $query->select('productCode','orderNumber','priceEach as unit_price',DB::raw('quantityOrdered*priceEach as line_total'));
    }))
    // 关联计算订单总金额
    ->withSum(['OrderDetail as order_total' => function($query) {
        $query->select(DB::raw('SUM(quantityOrdered * priceEach)'));
    }])
    ->with('customer')
    ->first()
    ->makeHidden(['orderNumber']);

两种方案返回的结构都会在订单根节点下新增order_total字段存储所有明细line_total的总和,符合输出要求。

内容的提问来源于stack exchange,提问作者Virajee Amarasinghe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:57:04