2016-11-10 125 views
1

我在鏈接共享網站上工作,需要通過他們的投票排序鏈接。Laravel 5 orderBy關係計數和分頁

我有一個'links'表和一個link_votes表。

link_votes表具有鏈接表'id'字段的'link_id'引用字段。

我有我的鏈接模型的hasMany關係:

public function votes() 
{ 
    return $this->hasMany('\App\LinkVote'); 
} 

這將返回所有行(每行是一票)的詮釋,他link_votes表。

我的標準查詢來獲取所有我的鏈接,併爲了他們所創造的日期是:

$links = Link::withCount('votes')->orderBy('votes_count', 'desc')->paginate(10); 

我想現在要做的是爲了通過他們有票額我聯繫。

什麼我現在是:

$links = Link::orderBy('created_at', 'desc')->with('votes')->paginate(20); 

這工作,但幾乎不怎麼樣。我有一個vote_type字段,在我的link_votes表中有兩種類型的投票。如果投票結果爲1,但是投票結果爲1,則投票結果爲0。

問題出在這裏,按票數排序,它將所有選票作爲一個計數,並將投票結果爲否定票那些沒有任何投票的鏈接。

我需要找到upvotes(vote_type = 1)減去downvotes(vote_type = 2)的總和的排序方式。

在我看來,我通過做數學來顯示投票數。

回答

1

邏輯的變化使我比第一個想法更容易做到這一點。

我所需要做的就是計數積極的(upvotes)作爲點數,因爲它們是唯一重要的點數。

要做到這一點,我已經改變了withCount到:

$links = Link::withCount([ 
     'votes' => function ($query) { 
      $query->where('vote_type', 1); 
     } 
    ]) 
    ->orderBy('votes_count', 'desc') 
    ->paginate(10);