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