Scopes в Yii2

В Yii первой версии были scope, что очень улучшало практику написания кода. В Yii2 тоже есть скопы, но они называются немного по-другому.

Итак, как сделать scope в Yii2.

Создаем класс UserQuery в common\models (если шаблон advanced)

UserQuery.php

<?php

namespace common\models;

use yii\db\ActiveQuery;

class UserQuery extends ActiveQuery
{
    public function active()
    {
        return $this->andWhere(['status' => 10]);
    }
}

В модели User добавляем код

public static function find()
{
    return new UserQuery(get_called_class());
}

Пример использования:

User::find()->active()->all(); //выводим всех пользователей с полем status = 10

Task::findOne(123)->getUsers()->active()->all(); //пример с реляциями

Более подробно смотрите в документации https://www.yiiframework.com/doc/guide/2.0/en/db-active-record