Yii2. Как в ActiveQuery модели переопределить метод all()? Всем здравствуйте.
Столкнулся с такой задачей:
в таблице есть поле active, необходимо выбрать только те строки, в которых поле active=1 абсолютно для всех вызовов данной модели.
Решение которое я нашел меня не совсем устраивает(так как придется менять это во всех вызовах, а их накопилось много, да и делать это нужно не для одной модели):public function allActive(){
$this->andWhere('table_name.active=1')->all();
}
А все попытки записать эту конструкцию в all() приводили к ошибкам
Возможно ли переопределить метод all() и вставить туда условие active=1?

21 Авг 2019 в 07:02
155 +1
2
Ответы
1

Для переопределения метода all() в ActiveQuery модели Yii2 и добавления условия active=1 можно использовать следующий подход:

Создайте новый класс для вашего ActiveQuery, например, CustomQuery, который будет наследоваться от оригинального класса ActiveQuery.namespace app\models;
use yii\db\ActiveQuery;
class CustomQuery extends ActiveQuery
{
public function all($db = null)
{
$this->andWhere(['active' => 1]);
return parent::all($db);
}
}В вашей модели используйте метод customize() для настройки запроса на использование вашего CustomQuery.namespace app\models;
use yii\db\ActiveRecord;
class YourModel extends ActiveRecord
{
public static function find()
{
return new CustomQuery(get_called_class());
}
}

Теперь при вызове метода all() для вашей модели все строки будут фильтроваться по условию active=1 автоматически.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир