Не могли бы вы привести пример использования. Описание будет высоко оценено. Я не могу найти хороший пример для этого.
Активный запрос представляет запрос БД, связанный с Активная запись учебный класс. Обычно используется для переопределения по умолчанию 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 Именованные Области в 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();
Других решений пока нет …