yii2 Как сделать заказ через отношение по COUNT?
У меня есть организаторы, которые проводят турниры, в которых может участвовать игрок.
Итак, у меня за столами организатор, турнир, участие, игрок.
Я установил связь в модели организатора, которая дает мне всех игроков, которые когда-либо платили в турнире, организованном этим организатором.
public function getTournaments()
{
return $this->hasMany(Tournament::className(), ['organizer' => 'id'])->where(['hasBeenAudited' => 1]);
}
public function getParticipations()
{
return $this->hasMany(Participation::className(), ['tournament' => 'id'])
->via('tournament')->where(['didShowUp' => 1]);
}
public function getPlayers() {
return $this->hasMany(Player::className(), ['id' => 'player'])
->via('participation');
}
Так что теперь я могу сделать $model->players
и получить всех игроков, которые когда-либо играли в этой организации.
Я бы сейчас хотела заказать $model->players
в зависимости от количества турниров, сыгранных игроком для этой организации, так что игрок, сыгравший в большинстве турниров для организации, будет отображаться вверху.
Как я могу это сделать?
1 ответ
Вы не должны делать запрос по группам. Попробуйте что-то вроде этого
$model->getPlayers()
->with('tournaments')
->select(['organization.name', 'player.name'])
->groupBy(['organization.name', 'player.name'])
->orderBy(['count(tournaments.id)'=>SORT_DESC])
->all();