2014-09-06 105 views
0

当我有一个项目表和数据透视表“like_project”其中有2列:USER_ID和PROJECT_ID,这样用户就可以像项目“排序”查询关系

我想列出所有的项目和按编号命令他们喜欢的,通过使用“有”方法,像这样:

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

的问题是,我不知道如何喜欢的号命令,我有一个函数在我的项目模型来计算一个项目的喜欢数量:

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

回答

0

除非你想写出一个长的SQL查询来运行一个GROUP/ORDER BY命令,否则一旦你得到这些项目,我就会运行这个雄辩集合的排序方法。

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

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);