row*_*eil 1 php laravel eloquent
我有两个模型。一个是Order,另一个是Item。一个订单可以有多个商品,而一个商品只能有一个订单。
我的订单模型中有这个:
public function items() {
return $this->hasMany('App\Item', 'OrderNumber', 'OrderNumber');
}
Run Code Online (Sandbox Code Playgroud)
这是我的项目模型:
function order() {
return $this->belongsTo('App\Order');
}
Run Code Online (Sandbox Code Playgroud)
我想要一个可以获取订单所有项目总数的函数。例如,我希望能够使用$order->items->totalPrice()来检索总数。
我试过将它添加到 Item 模型中,但没有运气。
public function totalPrice() {
$total = 0;
foreach($this as $item) {
$total += $item->AmountPaid;
}
return $total;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Undefined property: Illuminate\Database\Eloquent\Collection::$totalPrice
Run Code Online (Sandbox Code Playgroud)
做我想要实现的目标的最佳/最干净的方法是什么?更好的是,Laravel 是否有内置的总计方法?
您可以访问它Order(因为此关系的动态属性将返回 aCollection我们可以使用该sum方法来帮助我们):
public function totalPrice()
{
return $this->items->sum('AmountPaid');
}
Run Code Online (Sandbox Code Playgroud)
然后在Order实例上调用它。
$order->totalPrice();
Run Code Online (Sandbox Code Playgroud)
如果您要检索大量Order记录并遍历它们以获得这些总数,您将需要急切地加载关系以避免 N+1。
$orders = Order::with('items')->....->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |