"按顺序排列"查询关系时

时间:2014-09-06 14:06:10

标签: laravel

我有一个Project表和一个数据透视表" like_project"它有2列:user_id和project_id,因此用户可以喜欢Projects

我试图列出所有项目并按喜欢的数量排序,使用" has"方法,像这样:

$projects = Project::has('likes')->paginate(10);

问题在于我不知道如何通过喜欢的数量订购,我在我的项目模型上有一个功能来计算项目的喜欢数量:

public function getTotalLikes(){
    return sizeof($this->likes()->getRelatedIds()); //I could use $this->likes()->count()
}

2 个答案:

答案 0 :(得分:0)

除非您想要编写一个长SQL查询来运行GROUP / ORDER BY命令,否则我只需在重新启动项目后运行eloquent collection的排序方法。

$projects->sort(function($project) { return $project->likes->count(); });

答案 1 :(得分:0)

这取决于您的喜好是如何准确存储的,但最直接的方式是简单连接(假设MySQL):

$projects = Project::join('like_project as lp', 'lp.project_id', '=', 'projects.id')
              ->groupBy('projects.id')
              ->orderByRaw('count(lp.project_id) desc')
              ->select('projects.*') // and if needed: DB::raw('count(lp.project_id) as likesCount')
              ->paginate(10);