Php Laravel 5 orderBy关系计数和分页

Php Laravel 5 orderBy关系计数和分页,php,laravel,laravel-5,relationship,laravel-5.3,Php,Laravel,Laravel 5,Relationship,Laravel 5.3,我在一个链接共享网站上工作,需要按他们的投票顺序排列链接 我有一个“链接”表和一个链接投票表 链接投票表有一个指向链接表“id”字段的“链接id”引用字段 我的链接模型中有很多关系: public function votes() { return $this->hasMany('\App\LinkVote'); } 这将返回link_vots表中的所有行(每行都是一次投票) 获取所有链接并按创建日期排序的标准查询是: $links = Link::withCount('vote

我在一个链接共享网站上工作,需要按他们的投票顺序排列链接

我有一个“链接”表和一个链接投票表

链接投票表有一个指向链接表“id”字段的“链接id”引用字段

我的链接模型中有很多关系:

public function votes()
{
    return $this->hasMany('\App\LinkVote');
}
这将返回link_vots表中的所有行(每行都是一次投票)

获取所有链接并按创建日期排序的标准查询是:

$links = Link::withCount('votes')->orderBy('votes_count', 'desc')->paginate(10); 
我现在想做的是按投票数排序我的链接

我目前拥有的是:

$links = Link::orderBy('created_at', 'desc')->with('votes')->paginate(20);
这很有效,但几乎太好了。在我的链接投票表中,我有两种投票类型,即“投票类型”字段。如果投票是向上投票,则其类型为1;如果投票是向下投票,则其类型为2

这里的问题是通过计票排序,将所有选票作为计票,并将投反对票的选票放在没有任何选票的链接之上

我需要找到一种排序方法,通过向上投票(投票类型=1)减去向下投票(投票类型=2)的总和进行排序


在我看来,我通过做数学来显示计票结果。

逻辑的改变让我比最初想象的更容易做到这一点

我所需要做的就是把正面的(向上的投票数)作为计票依据,因为它们是唯一重要的

为此,我已将withCount更改为:

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