我如何按关系分组?
实施例
Sales::with('product_detail.product')->groupBy('product_name')->get()
如何使用雄辩的代码获得结果?
答案 0 :(得分:10)
您可以指定一个回调函数来对您的关系进行分组,如下所示:
Sales::with(['product_detail.product' => function($query){
$query->groupBy('product_name');
}])->get();
答案 1 :(得分:0)
我认为最重要的答案不是回答问题。据我了解,目的是将外部查询的结果分组,而不是对关系进行分组。
在Eloquent-y DB调用中这是不可能的,因为With的调用是分开的。您可以手动连接表并按必填列进行分组。
如果您想保持口才,则有很多方便的方法可用于Collections,包括GroupBy。因此,您可以先获取数据,然后再进行分组。
答案 2 :(得分:0)
按远方关系分组:
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();
答案 3 :(得分:0)
laravel >= 7 你可以使用:
在控制器
$user->sales()->groupBy('product_name')->get();
在 User.php 文件中:
public function sales(){
return $this->hasMany('App\Sales','user_id');
}
答案 4 :(得分:-1)
这将帮助您按关系进行分组。
$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'));