Laravel通过雄辩的关系进行分组

时间:2016-04-07 06:53:24

标签: laravel relation

我如何按关系分组?

实施例

Sales::with('product_detail.product')->groupBy('product_name')->get()

如何使用雄辩的代码获得结果?

5 个答案:

答案 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'));