2015-04-18 10 views
5

Ho una domanda in mio controller:Yii2 ORDER BY per i dati relazionali in ActiveRecord

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

getBackups è una relazione hasMany(), in modo da $ modello ritorna diversi 'backup'.

Esiste un modo per ordinare i "backup"?

Ho provato quanto segue senza risultati (o errori):

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

Ho testato il codice e funziona correttamente (il secondo con la richiesta di callback di query). Provalo con la modifica della direzione dell'ordine (SORT_DESC, SORT_ASC): echo $ model-> backup [0] -> id. L'ID dovrebbe cambiare. altrimenti penserei che ci sia un solo backup in db. –

+0

Ne darò un'altra occhiata. Grazie –

+0

Ho 3 campi relazionali che mostrano sulla voce che sto guardando ora. Ho provato entrambe le opzioni di ordinamento e sto facendo eco all'id dei backup [0] come dici tu. Non riesco a ottenere risultati che cambiano:/ –

risposta

7

È possibile in Object modello di dichiarazione relazione backups ordinati con orderBy:

public function getSortedBackups() 
    { 

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

fine, quando si uscita questi backup:

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

questo funziona. +1. –

Problemi correlati