web-dev-qa-db-fra.com

Trier les relations hasMany dans Yii2

J'ai une relation simple 1: N pour obtenir des prix d'un modèle unique.

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

Mais j'ai besoin d'objets de prix triés par une propriété spécifique dans ce cas $value

J'ai vu plusieurs exemples dans Yii 1 mais rien dans Yii 2 

Grâce à @vishu, j'ai essayé ceci:

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

}

Mais maintenant, il retourne un tableau vide.

10
Sageth

Je pense que vous pouvez assigner la commande directement par rapport à 

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

Utilisez comme ....... 

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

Référence

0
vishuB

Établir un ordre directement en relation peut ne pas être fiable dans des cas particuliers. Ainsi, vous pouvez définir l'ordre dans la requête AR

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