如何修复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
相关产品推荐
相关产品推荐

