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

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

ActiveQuery в Гии

31

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]