В 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".
Оба способа могут быть использованы вместе или по отдельности, в зависимости от вашей конкретной задачи. Выбор между ними зависит от того, какие условия вы хотите добавить и в каком контексте.