Упорядочение массива по количеству результатов связанной таблицы - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь сделать следующее:

У меня есть две модели: Pub и User, связанные промежуточной таблицей под названием «рекомендованные_публики», где пользователь устанавливает определенный паб в качестве «рекомендуемого».

Соотношения NxN следующие:

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

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, но у меня были некоторые проблемы с изменением левого соединения ...

Большое спасибо !!

1 Ответ

0 голосов
/ 06 июня 2018

Использование withCount():

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