Yii2: Пример ActiveQuery и в чем причина генерации класса ActiveQuery отдельно в Gii?

Не могли бы вы привести пример использования. Описание будет высоко оценено. Я не могу найти для этого хороший пример.

ActiveQuery в Gii

Активный запрос представляет собой запрос БД, связанный с классом Active Record . Он обычно используется для переопределения метода find() по умолчанию для конкретной модели, где он будет использоваться для генерации запроса перед отправкой в ​​БД:

 class OrderQuery extends ActiveQuery { public function payed() { return $this->andWhere(['status' => 1]); } public function big($threshold = 100) { return $this->andWhere(['>', 'subtotal', $threshold]); } } 

Если вы раньше работали с Yii 1, то это то, что заменяет Yii 1.x Named Scopes в Yii2. Все, что вам нужно сделать, это переопределить метод find() в вашем классе модели, чтобы использовать класс ActiveQuery выше:

 // This will be auto generated by gii if 'Generate ActiveQuery' is selected public static function find() { return new \app\models\OrderQuery(get_called_class()); } 

Тогда вы можете использовать его так:

 $payed_orders = Order::find()->payed()->all(); $very_big_orders = Order::find()->big(999)->all(); $big_payed_orders = Order::find()->big()->payed()->all(); 

Другой вариант использования того же класса ActiveQuery, определенный выше, заключается в использовании его при определении реляционных данных в соответствующем классе модели, например:

 class Customer extends \yii\db\ActiveRecord { ... public function getPayedOrders() { return $this->hasMany(Order::className(),['customer_id' => 'id'])->payed(); } } 

Затем вы можете с нетерпением загружать клиентов своими соответствующими оплаченными заказами , делая:

 $customers = Customer::find()->with('payedOrders')->all();