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

Laravel如何用withSum按status条件统计关联表两列乘积的加减总和

解决方案

方式1:使用withSum结合原生表达式(推荐,适配预加载统计需求)

你可以直接在withSum方法中传入带自定义查询逻辑的闭包,配合SQL的CASE WHEN条件语句实现差异化统计:

  1. 先引入DB门面:
use Illuminate\Support\Facades\DB;
  1. 执行查询:
$warehouses = Warehouse::withSum([
    // 别名 total_actual_amount 为统计结果的字段名,可自行修改
    'sales as total_actual_amount' => function ($query) {
        $query->select(DB::raw(
            'SUM(
                CASE 
                    WHEN status = 1 THEN product_price * quantity 
                    WHEN status = 2 THEN - (product_price * quantity) 
                    ELSE 0 
                END
            )'
        ));
    }
])->get();

查询完成后,每个Warehouse实例都会携带total_actual_amount属性,值就是你需要的统计结果。

方式2:单个仓库实例的单独统计

如果你已经获取了某个指定仓库的实例,也可以直接通过关联关系做单次统计:

// $warehouse 为已查询得到的指定仓库实例
$totalActualAmount = $warehouse->sales()
    ->selectRaw(
        'SUM(
            CASE 
                WHEN status = 1 THEN product_price * quantity 
                WHEN status = 2 THEN - (product_price * quantity) 
                ELSE 0 
            END
        ) as total'
    )
    ->value('total');

注意:如果product_price为浮点类型,建议提前将字段调整为DECIMAL类型,避免统计时出现浮点精度误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:03