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

Laravel带条件计算两列乘积和 实现各仓库总收入统计

解决方案

你可以直接基于已获取的Warehouse集合,使用Laravel集合内置的遍历和求和方法完成自定义规则的收入计算,实现代码如下:

方案1:基于已加载关联的集合做计算(符合你要的集合实现需求)

// 你原本获取Warehouse集合的代码,已经预加载了sales关联
$warehouses = Warehouse::with('sales')->get();

$warehouses = $warehouses->map(function ($warehouse) {
    // 按规则计算单仓库总收入
    $totalRevenue = $warehouse->sales->sum(function ($sale) {
        $itemAmount = (float)$sale->price * $sale->quantity;
        return $sale->status === 1 ? $itemAmount : -$itemAmount;
    });
    // 将计算结果挂载到仓库对象属性上
    $warehouse->total_revenue = $totalRevenue;
    return $warehouse;
});

处理完成后,你可以直接通过$warehouse->total_revenue获取对应仓库的总收入,计算结果和你给出的示例完全一致。

方案2:查询阶段直接完成计算(适合数据量较大的场景)

如果你的数据量较大,不希望把所有销售记录加载到内存中计算,可以使用withAggregate方法在数据库查询层面完成计算,性能更高:

use Illuminate\Support\Facades\DB;

$warehouses = Warehouse::withAggregate('sales as total_revenue', function ($query) {
    $query->select(DB::raw(
        'SUM(CASE 
            WHEN status = 1 THEN price * quantity 
            WHEN status = 2 THEN -price * quantity 
            ELSE 0 
        END)'
    ));
})->get();

内容的提问来源于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 12:36:02