Как добавить условия по умолчанию с учетом alias?

В Yii для добавления условий по умолчанию с учетом псевдонима (alias) можно воспользоваться двумя способами: использование метода andFilterWhere() и использование метода addCondition() внутри метода defaultScope() модели.

1. Использование метода andFilterWhere():

Метод andFilterWhere() в Yii позволяет добавлять условия к существующему запросу в виде фильтрации. Он автоматически пропускает пустые значения, поэтому они не приведут к добавлению пустых условий в запрос.

Пример кода:

$query = Model::find();
$query->andFilterWhere(['status' => $status]);
$query->andFilterWhere(['like', 'name', $name]);

$result = $query->all();

В приведенном примере $query - это экземпляр класса, соответствующего вашей модели. Метод andFilterWhere() добавляет условие status = $status в запрос, если значение $status не является пустым. А также добавляет условие name LIKE '%{$name}%', если значение $name не является пустым.

2. Использование метода addCondition() внутри метода defaultScope():

Метод defaultScope() в Yii позволяет добавлять условия по умолчанию для всех запросов, связанных с моделью. Это может быть полезно, если вам нужно добавить условия-фильтры для каждого запроса.

Пример кода:

public function defaultScope()
{
    $alias = $this->getTableAlias(false, false); // получение псевдонима таблицы

    return [
        'condition' => "$alias.status = 'active'", // добавление условия по умолчанию
    ];
}

В приведенном примере defaultScope() - это метод внутри вашей модели. В нем мы используем метод getTableAlias(false, false), чтобы получить псевдоним таблицы без алиаса схемы. Затем мы возвращаем массив, содержащий ключ condition, который задает условие по умолчанию, где статус равен "active".

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