2016-11-21 111 views
0

我有一個組織者,可以參加一個球員參加的比賽。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,這樣玩過該組織最多比賽的玩家就會出現在頂部。

我該怎麼做?

+0

你的查詢會是什麼樣子? – topher

+0

topher:我沒有單獨的查詢。我試圖訂購$ this-> hasMany()。 – Mathias

回答

0

你需要做'分組'查詢。嘗試像這樣

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