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

21 Авг 2019 в 07:02
180 +2
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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир