Laravel OrderBy关系计数,但关系中的属性是特定的


Laravel OrderBy relationship count, but where an attribut in the relationship is something specific

我有一个叫笑话的表和一个叫投票的表。笑话有很多选票。在我的投票表上,我有一个属性,叫做投票。投票可以是1或0。1表示赞成票,0表示反对票。在我的系统中,我想让用户过滤出投票最多的笑话。我的问题是,我怎么才能在最多票数的情况下点我的笑话。

为了一个笑话,我得到了它的上升票数如下:

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

但我不知道如何在投票数=1的情况下计算OrderBy关系。

这可能是一条很长的路,但它应该可以工作:

第一步:获取笑话集$jokes

第二步:对笑话集合进行迭代,得到收入关系模型$jokes->each(function ($joke){});

步骤3:对于每个选票关系,通过仅过滤具有vote == 1的选票来获得等于1的票数。$joke->votes->filter(function ($vote) {return ($vote->vote == 1);})->count()

步骤4:将count of votes属性添加到笑话模型$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'));