首页 > 解决方案 > orderBy on hasMany 与 laravel 中的分页关系

问题描述

Act Review 通过这种关系连接到“Act_master”。One-Act 可以有很多评论。

public function reviews() {
    return $this->hasMany('ActReview', 'act_id', 'id');
}

问题我应该如何通过最大评论数到最低评论数来获得行为列表顺序。

到目前为止我尝试了什么?

我已经添加了带有“whereHas”的查询,但结果列表没有得到想要的结果,因为行为列表具有最高到最低的评论。

我也尝试过“WITH”,但这也不起作用。

如果可能的话,请指导我根据最大评论数到最低评论数来获取行为列表。

   $list   = ActMaster::where('status', '=', '1');

    $list = $list->whereHas('reviews',function ($query) {
        $query->select(\DB::raw('count(*) as row_count'));
        $query->where('published', '=', '1');
        $query->orderBy('row_count','desc');
        $query->groupBy('act_id');                
    });

    $list = $list->paginate(10);

标签: laravelsortingeloquentsql-order-bylaravel-pagination

解决方案


尝试这个 :

$list = ActMaster::where('status', 1)->whereHas('reviews', function($query){
    $query->select(\DB::raw('count(*) as row_count'))
          ->where('published', '1')
          ->groupBy('act_id')
          ->orderBy('row_count','desc');
})->paginate(10);

推荐阅读