как оператор с правым соответствием% в массиве в yii2 - PullRequest
0 голосов
/ 01 декабря 2018

Это построитель массивов и запросов yii

$arr = ['delhi','mumbai'];
$query->orWhere(['LIKE','city',$arr."%",false]);

Я хочу сгенерировать, где условие, подобное этому

where city like 'delhi%' or city like 'mumbai%'

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Исходный код ссылки: \yii\db\QueryBuilder::buildLikeCondition()

$cities = ['city1', 'city2', 'city3'];
$query = new \yii\db\Query();

$query->where(['or like', 'city', array_map(function ($item) {
    return $item.'%';
}, $cities), false]); 

print_r($query->createCommand()->rawSql);

// output: SELECT * WHERE `city` LIKE 'city1%' OR `city` LIKE 'city2%' OR `city` LIKE 'city3%'
0 голосов
/ 01 декабря 2018

Просто используйте SIMILAR TO в Postgres или REGEXP_LIKE в MySQL (в зависимости от вашей базы данных) вместо LIKE

Например, ваш запрос должен выглядеть следующим образом:

$query->andWhere(['SIMILAR TO', 'city','('.implode('|', $arr).')%',false]);
...