我有一个组织者,可以参加比赛,玩家可以参加比赛。
所以我有桌面组织者,比赛,参与,球员。
我在组织者模型中建立了一个关系,它给了我所有在该组织者组织的锦标赛中付款人的玩家。
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
,以便为该组织参加比赛最多的锦标赛将出现在最顶层。
我该怎么做?
答案 0 :(得分:0)
你需要做'分组'查询。试试这样的事情
$model->getPlayers()
->with('tournaments')
->select(['organization.name', 'player.name'])
->groupBy(['organization.name', 'player.name'])
->orderBy(['count(tournaments.id)'=>SORT_DESC])
->all();