2014-09-06 102 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);