我有一个名为“笑话”的表和一个名为“投票”的表。笑话有很多票。在我的投票表上,我有一个名为投票的属性。 vote 可以是 1 或 0。1 表示赞成,0 表示反对。在我的系统中,我想让用户过滤以查看投票最多的笑话。我的问题是如何订购获得最多赞成票的笑话。
对于一个笑话,我得到的票数如下:
$vote_up_count = $joke->votes()->where('vote', '=', 1)->count();
但我不知道如何在投票数 = 1 的情况下进行 OrderBy 关系计数。
最佳答案
这可能是一个很长的路要走,但它应该有效:
第 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 步:根据新的 count 属性 sortByDesc('count')
对整个笑话集合进行降序排序。
最终结果如下所示:
$sortedByVoteCount = ($jokes->each(function ($joke) {
$count = ($joke->votes->filter(function ($vote) {
return ($vote->vote == 1);
})->count());
$joke->count = $count;
})->sortByDesc('count'));
关于php - Laravel Order By 关系计数,但关系中的属性是特定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264701/