【问题标题】:Laravel OrderBy relationship count, but where an attribut in the relationship is something specificLaravel OrderBy 关系计数,但关系中的属性是特定的
【发布时间】:2016-09-12 21:06:23
【问题描述】:

我有一张叫做笑话的桌子和一张叫做投票的桌子。笑话有很多票。在我的投票表上,我有一个名为 vote 的属性。 vote 可以是 1 或 0。1 表示赞成,0 表示反对。在我的系统中,我想让用户过滤出投票最多的笑话。我的问题是我怎样才能以最高票数来安排我的笑话。

对于一个笑话,我得到它的赞成票数如下:

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

但我不知道如何将 OrderBy 关系计入投票中的投票 = 1。

【问题讨论】:

    标签: php mysql eloquent laravel-5.2


    【解决方案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'));
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2015-11-21
      • 2013-08-11
      • 2020-07-08
      • 2017-03-25
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2019-08-31
      相关资源
      最近更新 更多