У меня есть задача - добавить к поисковой модели поиск по имени. Полное имя - это имя + фамилия. Поэтому мне нужно построить запрос, например
WHERE first_name LIKE '%var%' OR last_name LIKE '%var%'
Единственный способ, которым я мог это сделать:
$query->andFilterWhere([
'OR',
'profiles.first_name LIKE "%' . $this->userFullName . '%" ',
'profiles.last_name LIKE "%' . $this->userFullName . '%"'
]);
Но мне это не нравится, потому что% его небезопасно. Я не знаю, как... Я думаю, что есть способ построить такой запрос с yii2 active builder, и я хотел бы получить результат smth, например
$query->andFilterWhere(['LIKE', 'profiles.first_name', $this->userFullName]);
$query->andFilterWhere(['OR LIKE', 'profiles.last_name', $this->userFullName]);
Проблема в запросе. Как, я могу использовать массив в качестве значений, которые атрибут будет компилирован, но я не могу использовать массив в качестве списка атрибутов, которые нужно сравнить с.
или
$subQuery1 = Profile::find()->Where(['LIKE', 'profiles.first_name', $this->userFullName]);
$subQuery2 = Profile::find()->Where(['LIKE', 'profiles.last_name', $this->userFullName]);
//i think its overloaded(3 queries insteadof 1 but still) and the final query
$query->andFilterWhere([
'OR',
$subQuery1,
$subQuery2
]);
Любые идеи о том, как создавать запрос без "%"?