2016-05-16 77 views
0

我有一個表稱爲笑話和一個表格稱爲投票。笑話有很多票。在我的投票表上,我有一個名爲vote的屬性。投票可以是1或0. 1用於投票,0用於投票。在我的系統中,我想讓用戶過濾出大部分投票的笑話。我的問題是,我怎樣才能用最多的票來排序我的笑話。Laravel OrderBy關係計數,但在關係中的屬性是特定的東西

對於一個笑話,我得到了它的最高的投票是這樣的:

$vote_up_count = $joke->votes()->where('vote', '=', 1)->count(); 

但我不知道如何排序依據關係計數,其中投中票= 1

回答

0

這可能是一個很長的路要做,但它應該工作:

第1步:獲取笑話集合$jokes

第2步:遍歷笑話集合以獲得收入關係模型$jokes->each(function ($joke){});

步驟3:對於每個投票關係,通過僅篩選具有vote == 1的投票來獲得等於1的票數。 $joke->votes->filter(function ($vote) {return ($vote->vote == 1);})->count()

第4步:給笑話模型$joke->count = $count添加一個票數屬性。

第5步:在新的計數屬性sortByDesc('count')上以降序對整個笑話集合進行排序。

最終結果看起來是這樣的:

$sortedByVoteCount = ($jokes->each(function ($joke) { 
     $count = ($joke->votes->filter(function ($vote) { 
      return ($vote->vote == 1); 
     })->count()); 

     $joke->count = $count; 

    })->sortByDesc('count'));