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();
Другие вопросы по тегам