按相关表结果的计数排序数组

时间:2018-06-06 16:33:56

标签: laravel eloquent sql-order-by has-and-belongs-to-many

我正在尝试以下方法:

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

关系是NxN如下:

公布

 /**
 * @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');
}

recommended_pubs表包含以下字段: ID | USER_ID |的pub_id

我想从其他功能($ pubs)收到一些某些酒吧,然后按照用户推荐酒吧的次数订购它们。

我尝试了以下内容并且有效:

$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 个答案:

答案 0 :(得分:0)

使用withCount()

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