yii2如何通过COUNT订购?

时间:2016-11-21 20:11:42

标签: yii count yii2 yii2-model yii-relations

我有一个组织者,可以参加比赛,玩家可以参加比赛。

所以我有桌面组织者,比赛,参与,球员。

我在组织者模型中建立了一个关系,它给了我所有在该组织者组织的锦标赛中付款人的玩家。

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

答案 0 :(得分:0)

你需要做'分组'查询。试试这样的事情

$model->getPlayers()
  ->with('tournaments')
  ->select(['organization.name', 'player.name'])
  ->groupBy(['organization.name', 'player.name'])
  ->orderBy(['count(tournaments.id)'=>SORT_DESC])
  ->all();