2015-12-30 20 views
9

Ho una semplice relazione 1: N per ottenere alcuni prezzi da un singolo modello.Sort hasMany relation in Yii2

public function getPrices() 
    { 
     return $this->hasMany(Prices::className(), ['device_id' => 'id']); 
    } 

Ma ho bisogno di prezzi oggetti sorteds da una proprietà specifica in questo caso $value

che ho visto più esempi in Yii 1, ma nulla in Yii 2

Grazie alla @vishu Ho provato questo :

public function getPrices() 
{ 
    return $this->hasMany(Prices::className(), ['device_id' => 'id']) 
     ->viaTable(Prices::tableName(), ['device_id' => 'id'], function ($query) { 

      $query->orderBy(['device_price' => SORT_DESC]); 
     }); 

} 

Ma ora restituisce un array vuoto.

risposta

16

Penso che si può assegnare l'ordine direttamente in relazione

public function getPrices() 
{ 
    return $this->hasMany(Prices::className(), ['device_id' => 'id'])-> 
     orderBy(['device_price' => SORT_DESC]); 
} 
1

Provate questo ....

public function getPrices() 
{ 
    $this->hasMany(Prices::className(), ['device_id' => 'id']) 
    ->viaTable('table_name', ['device_id' => 'id'], function ($query) { 
     $query->andWhere(['column_name' => value]) 
      ->orderBy(['sort' => SORT_DESC]); 
    }); 
} 

Reference

+0

Ho provato e sto ricevendo un array vuoto – Sageth

+0

controllare l'ID e quindi eseguire? – vishuB

+0

controllare la mia modifica, questo è quello che ho usato – Sageth

0

ordine impostazione direttamente in relazione non può essere affidabile in casi particolari. Quindi puoi impostare l'ordine nella query AR

Device::find() 
->where(['id' => $id]) 
->with('prices' => function(\yii\db\ActiveQuery $query) { 
    $query->orderBy('device_price DESC'); 
}) 
->one();