【发布时间】:2016-07-27 21:31:19
【问题描述】:
如何按关系分组?
例子
Sales::with('product_detail.product')->groupBy('product_name')->get()
如何用 eloquent 的代码得到结果?
【问题讨论】:
-
这个问题解决了吗?
如何按关系分组?
例子
Sales::with('product_detail.product')->groupBy('product_name')->get()
如何用 eloquent 的代码得到结果?
【问题讨论】:
您可以指定一个回调函数来对您的关系进行分组,如下所示:
Sales::with(['product_detail.product' => function($query){
$query->groupBy('product_name');
}])->get();
【讨论】:
我认为最佳答案不是回答问题。据我了解,目的是对外部查询的结果进行分组,而不是对关系进行分组。
这在 Eloquent-y 数据库调用中是不可能的,因为对 With 的调用是分开的。您可以手动加入表格并按所需列分组。
如果你想保持 Eloquent-y,Collections 有很多方便的方法,包括 GroupBy。所以你可以先获取数据,然后再分组。
【讨论】:
laravel >= 7 你可以使用:
在控制器
$user->sales()->groupBy('product_name')->get();
在 User.php 文件中:
public function sales(){
return $this->hasMany('App\Sales','user_id');
}
【讨论】:
这可能已经很老了,但它可以帮助寻求者。
您可以在 Laravel 中使用 groupBy 直接链接到关系/远程关系。我不知道这是否特定于任何版本,但 V8 有效。并且关系也像您使用 with 一样被加载。
Sales::query()->where('this', $that)->get()->groupBy('product.name'); // OR
Sales::query()->where('this', $that)->get()->groupBy('product.status.name');
【讨论】:
groupBy 方法。它正在处理一个集合,而不是数据库查询。
按远亲分组:
Sales::select(DB::raw('count(*) as count'), 'products.name')
->join('product_details', 'sales.product_detail_id', '=', 'product_details.id')
->join('products', 'product_details.product_id', '=', 'products.id')
->groupBy('products.name')
->get();
【讨论】:
这将帮助您按关系进行分组。
$sales = Order::Sales('product')
->where('approved','=','Yes')
->groupBy('product_id')
->orderBy(DB::raw('COUNT(id)','desc'))
->get(array(DB::raw('COUNT(id) as totalsales'),'product_id'));
【讨论】: