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

如何修复Laravel Cargo模型Eloquent访问器计算订单总金额返回0的问题

问题原因

  • 你调用$this->orders()时带了括号,返回的是关联关系查询构造器实例,而非实际的订单数据集合,所以foreach遍历的是空对象,总和自然为0。
  • 另外你数据结构里price是字符串类型,计算时最好强制转数值避免潜在的类型转换错误。

修复方案

写法1:调整原有遍历逻辑

适合订单量小、同时需要用到订单其他字段的场景:

public function getProductMarginAttribute()
{
    $total = 0;
    // 去掉括号,用动态属性获取已加载的订单集合
    foreach ($this->orders as $order) {
        $total += $order->qty * (float)$order->price;
    }
    return $total;
}

写法2:SQL层面聚合计算(更推荐)

不需要把全量订单数据加载到PHP内存遍历,直接通过SQL计算结果,订单量越大性能优势越明显:

public function getProductMarginAttribute()
{
    return $this->orders()->sum(\DB::raw('qty * price'));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:00