假设我有这些模块:
- 优惠券
- 订单 (.., coupon_id)
- 项目(...,order_id,价格)
还有这些关系:
Coupon
有很多Order
。Order
有很多Item
。
到现在为止还挺好。
现在我想对属于优惠券的订单的商品价格求和。所以我想过做这样的事情:
Coupon::orders->items->sum('price');
好吧,它不会起作用,因为orders()
方法返回一个Collection
关系:
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function orders()
{
return $this->hasMany(Order::class);
}
我收到一条错误消息,指出item
财产受到保护。我发现它与我的Item
模块无关,只是因为Collection
has protected $items = [];
.
所以,在我清除了一些事实之后,我的问题/问题是,我怎样才能总结属于items->price
的?orders
Coupon
当然,我可以通过执行这样的 foreach 循环来实现我的目标:
$price = 0;
foreach (Coupon:orders as $order)
$price += $order->items->sum('price');
return $price;
但我正在寻找更清洁的解决方案。任何人?