Laravel Eloquent关系函数“with”和“groupBy”如何一起使用它

时间:2017-05-20 17:45:29

标签: php laravel laravel-5

嗨,我与多对多的关系及其工作。我需要制作人气因此我想使用groupBy并使用查询计数。但我不知道我怎么能参考关系表rent_car。

控制器:

 public function popularityCar()
{

 $total_raw = DB::raw('count(*) as total');
 $cars = User::with('rentcar')
        ->where('rentcar')
        ->select('car_id', $total_raw)
        ->groupBy('car_id')           
        ->get();
 dump($cars);   
 echo $cars;
          return view('user.popularityCar',['cars' => $cars]);
}

模型用户;

    public function rentcar()
{
    return $this->belongsToMany(Cars::class,'rent_car','user_id','car_id')->withTimestamps()->withPivot('start', 'end');
}

模型车:

 public function caruser()
{
    return $this->belongsToMany(User::class,'rent_car','car_id','user_id');
}

所以我的问题是如何使用groupBy并使用函数“with”进行计数。 我试着找到了它,我做了一些想法,就像我在我的控制器中显示。

1 个答案:

答案 0 :(得分:1)

使用 withCount()方法。
所以你的代码可以是这样的:

 $cars = User::with('rentcar')
    ->withCount('rentcar')
    ->where('rentcar_count', '>', 0)
    ->get();

立即考虑您的选择列表中的 rentcar_count 字段。 希望这会有所帮助。

<强>编辑:
您坚持使用group by。因此,请将上面的代码更新为以下内容:

 $cars = User::with('rentcar')
    ->select('car_id', \DB::raw('Count(car_id) as rentcar_count'))
    ->groupBy('car_id')           
    ->having('rentcar_count', '>', 0)
    ->get();

讨论后
这段代码很有希望:

Cars::with('caruser')
  ->withCount('caruser')
  ->where('caruser_count', '>', 0)
  ->orderBy('caruser_count', 'DESC')
  ->take(5)
  ->get();