Pourriez-vous fournir un exemple d'utilisation. La description sera très appréciée. Je ne peux pas en trouver un bon exemple.
Active Query représente une requête DB associée à une classe Active Record . Il est généralement utilisé pour remplacer la méthode par défaut find()
d'un modèle spécifique où il sera utilisé pour générer la requête avant de l'envoyer à DB:
class OrderQuery extends ActiveQuery
{
public function payed()
{
return $this->andWhere(['status' => 1]);
}
public function big($threshold = 100)
{
return $this->andWhere(['>', 'subtotal', $threshold]);
}
}
Si vous avez travaillé auparavant avec Yii 1, c'est ce qui remplace Yii 1.x Named Scopes dans Yii2. Tout ce que vous avez à faire est de remplacer la fonction find()
méthode dans votre classe modèle pour utiliser la classe ActiveQuery ci-dessus:
// This will be auto generated by gii if 'Generate ActiveQuery' is selected
public static function find()
{
return new \app\models\OrderQuery(get_called_class());
}
Ensuite, vous pouvez l'utiliser de cette façon:
$payed_orders = Order::find()->payed()->all();
$very_big_orders = Order::find()->big(999)->all();
$big_payed_orders = Order::find()->big()->payed()->all();
Un cas d'utilisation différent de la même classe ActiveQuery définie ci-dessus consiste à l'utiliser lors de la définition des données relationnelles dans une classe modèle similaire comme:
class Customer extends \yii\db\ActiveRecord
{
...
public function getPayedOrders()
{
return $this->hasMany(Order::className(),['customer_id' => 'id'])->payed();
}
}
Ensuite, vous pouvez charger avec impatience clients avec leurs commandes payées respectives en faisant:
$customers = Customer::find()->with('payedOrders')->all();