2016-11-21 4 views
0

Ich habe einen Veranstalter, der Turniere veranstaltet, an denen ein Spieler teilnehmen kann.yii2 Wie wird über die Beziehung nach COUNT bestellt?

So habe ich die Tische Veranstalter, Turnier, Teilnahme, Spieler.

Ich habe eine Beziehung im Organisator-Modell gemacht, die mir alle Spieler gibt, die jemals in einem von diesem Veranstalter organisierten Turnier zahlen.

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'); 
    } 

So, jetzt kann ich $model->players tun und alle Spieler abzurufen, die jemals für diese Organisation gespielt haben.

Ich möchte jetzt nach der Anzahl der Turniere, die ein Spieler für diese Organisation gespielt hat, bestellen, so dass der Spieler, der die meisten Turniere für die Organisation gespielt hat, an der Spitze erscheint.

Wie mache ich das?

+0

Wie würde Ihre Abfrage aussehen? – topher

+0

topher: Ich habe keine separate Abfrage. Ich versuche $ this-> hasMany() zu bestellen. – Mathias

Antwort

0

Sie müssen die Abfrage "Gruppieren nach" durchführen. Versuchen Sie etwas wie das

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