代码之家  ›  专栏  ›  技术社区  ›  Ber Tsacianegu del Tepuy

根据相关表结果的计数对数组排序

  •  0
  • Ber Tsacianegu del Tepuy  · 技术社区  · 6 年前

    我正在尝试以下操作:

    我有两个模型:pub和user,由一个名为“recommended_pubs”的中间表关联,用户在其中将某个pub设置为“recommended”。

    关系如下:

    Pub:

     /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function recommendedUsers()
    {
        return $this->belongsToMany(User::class, 'recommended_pubs');
    }
    

    用户:

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function recommendedPubs()
    {
        return $this->belongsToMany(Pub::class, 'recommended_pubs');
    }
    

    推荐的pubs表包含以下字段: ID用户ID酒吧ID

    我想从其他函数($pubs)接收一组特定的pub,然后按用户推荐pub的次数排序。

    我尝试了以下方法,结果成功了:

    $pubs = Pub::leftJoin('recommended_pubs', 'recommended_pubs.pub_id', '=', 'pubs.id')
                        ->leftJoin('users', 'recommended_pubs.pub_id', '=', 'users.id')
                        ->groupBy('pubs.id')
                        ->orderBy('users_count','desc')
                        ->selectRaw('pubs.*, count(users.id) as users_count')
                        ->get()
                        ;
    

    有什么想法吗?我试着在foreach中执行,但是修改leftjoins时遇到了一些问题…

    谢谢!!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jonas Staudenmeir    6 年前

    使用 withCount() :

    Pub::withCount('recommendedUsers')
        ->orderBy('recommended_users_count', 'desc')
        ->get();