2015-04-18 13 views
5

Ich habe eine Abfrage in meinem Controller:Yii2 ORDER BY für relationale Daten in Active

$model = Object::find()->where(['id' => $id])->with(['backups'])->one(); 

getBackups eine hasMany ist() Beziehung, so $ Modell gibt mehr 'Backups'.

Gibt es eine Möglichkeit, die 'Backups' zu bestellen?

Ich habe das versucht folgende ergebnislos (oder Fehler):

$model = Object::find() 
      ->where(['id' => $id]) 
      ->with(['backups' => function($query) { 
       $query->orderBy(['updated_at' => SORT_DESC]); 
      }]) 
      ->one(); 
+0

Ich habe Ihren Code getestet und es funktioniert gut (der zweite mit Abfragebestellungsrückruf). Teste es mit wechselnder Reihenfolge (SORT_DESC, SORT_ASC): echo $ model-> backups [0] -> id. Id sollte sich ändern. sonst würde ich denken, dass es nur eine Sicherung in db gibt. –

+0

Ich werde es mir noch einmal ansehen. Danke –

+0

Ich habe 3 relationale Felder, die auf dem Eintrag zeigen, den ich gerade beobachte. Ich habe beide Sortieroptionen ausprobiert, und ich wiederhole die ID von Backups [0], wie Sie sagen. Ich kann keine wechselnden Ergebnisse erhalten:/ –

Antwort

7

Sie können in Object Modell declare Beziehung sortiert backups mit orderBy:

public function getSortedBackups() 
    { 

    return $this->hasMany(Backup::className(), ['object_id' => 'id'])->orderBy(['backups.updated_at'=>SORT_DESC]); 
    } 

Ende bei der Ausgabe diese Sicherungen:

foreach($model->sortedBackups as $backup){ 
... 
} 
+0

das funktioniert. +1. –