Я пытаюсь сделать следующее:
У меня есть две модели: 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, но у меня были некоторые проблемы с изменением левого соединения ...
Большое спасибо !!