Laravel 查询生成器 - 在生成的属性上使用求和方法
Laravel Query Builder - Use sum method on a generated attribute
假设我有这两个模型:
订购型号:
- id
- 状态(不完整,完整)
商品型号:
- id
- order_id
- 类型
- is_worthy.
.
/**
* Returns the item's price according to its worthy
*/
public function getPriceAttribute()
{
return $this->is_worthy ? 100 : 10; // $
}
到目前为止一切顺利。
现在我想总结一下完整订单的价格。所以我这样做:
App\Item::whereHas('order', function ($query) {
$query->where('state', 'complete');
})->sum('price')
但问题是,我的 items
table 列中没有 price
。因为price
属性是在Model中生成的
所以我的问题是,如何汇总完整订单的价格?
有两种方法可以做到这一点:
1.让PHP完成所有工作
$items = App\Item::whereHas('order', function ($query) {
$query->where('state', 'complete');
})->get();
$sum = $items->sum(function($item) {
return $item->price;
});
// In Laravel 5.4, you can replace the last line with $sum = $items->sum->price;
2。让 SQL 完成所有工作
$items = App\Item::whereHas('order', function ($query) {
$query->where('state', 'complete');
})->select('*', DB::raw('IF(is_worthy, 100, 10) as price'))->sum('price');
Laravel
型号
/**
* Returns the item's price according to its worthy
*/
public function getPriceAttribute()
{
return $this->is_worthy ? 100 : 10; // $
}
控制器
retrun OrderItem::where('state', 'complete')->get()->sum('price');
假设我有这两个模型:
订购型号:
- id
- 状态(不完整,完整)
商品型号:
- id
- order_id
- 类型
- is_worthy.
.
/**
* Returns the item's price according to its worthy
*/
public function getPriceAttribute()
{
return $this->is_worthy ? 100 : 10; // $
}
到目前为止一切顺利。
现在我想总结一下完整订单的价格。所以我这样做:
App\Item::whereHas('order', function ($query) {
$query->where('state', 'complete');
})->sum('price')
但问题是,我的 items
table 列中没有 price
。因为price
属性是在Model中生成的
所以我的问题是,如何汇总完整订单的价格?
有两种方法可以做到这一点:
1.让PHP完成所有工作
$items = App\Item::whereHas('order', function ($query) {
$query->where('state', 'complete');
})->get();
$sum = $items->sum(function($item) {
return $item->price;
});
// In Laravel 5.4, you can replace the last line with $sum = $items->sum->price;
2。让 SQL 完成所有工作
$items = App\Item::whereHas('order', function ($query) {
$query->where('state', 'complete');
})->select('*', DB::raw('IF(is_worthy, 100, 10) as price'))->sum('price');
Laravel
型号
/**
* Returns the item's price according to its worthy
*/
public function getPriceAttribute()
{
return $this->is_worthy ? 100 : 10; // $
}
控制器
retrun OrderItem::where('state', 'complete')->get()->sum('price');