Yii2 ActiveQuery 'или LIKE' фильтр
у меня есть задача-добавить в поисковую модель поиск по полному имени. Полное имя-имя + фамилия. Поэтому мне нужно построить запрос, как
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
]);
есть идеи, как построить запрос whithout"%"?
1 ответов
вы должны просто попробовать :
$query->andFilterWhere([
'or',
['like', 'profiles.first_name', $this->userFullName],
['like', 'profiles.last_name', $this->userFullName],
]);
or
: аналогичноand
оператор, за исключением того, что операнды объединены с помощьюOR
. Например,['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]
будет генерировать(type IN (7, 8, 9) OR (id IN (1, 2, 3)))
.
подробнее : http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where()-detail