@Serrrgio

Как переопределить find()->all()?

Есть модель Document. Есть две модели DocumentIn и DocumentOut, расширяющие первую. Записи в таблице различаются по полю kind.

class DocumentIn extends Document
{
    ...
    public static function find()
    {
        Yii::warning(get_called_class());
        return new DocumentInQuery(get_called_class());
    }
    ...
}
class DocumentInQuery extends \yii\db\ActiveQuery
{
    public function active()
    {
        $this->andWhere('[[kind]]=0');
        return $this;
    }
    public function all($db = null)
    {
        return parent::all($db);
    }
    public function one($db = null)
    {
        return parent::one($db);
    }
}


Все входящие документы можно выбрать так: $docs = DocumentIn::find()->active()->all().
То есть, приходится вручную добавлять вызов active() в DocumentsInSearch при создании $dataProvider и везде, где нужно выбрать все записи данного вида.

Вопрос в том, как сделать так, чтобы DocumentIn::find()->all() возвращал все записи с '[[kind]]=0'?
  • Вопрос задан
  • 779 просмотров
Решения вопроса 1
public function all($db = null)
{
    $this->active();
    return parent::all($db);
}

или так
public function init()
{
    parent::init();
    $this->active();
}

Во втором случае методы sum(), count() и прочие тоже будут корректно работать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
DocumentIn::find() возвращает объект класса ActiveQuery, в нем и переопределите метод all...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы