yii2数组列表中带有右侧匹配%的like运算符

7xllpg7q  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(185)

这是一个数组和yii查询生成器

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

我想生成如下where条件

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

nwsw7zdq1#

参考源代码:\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%'
2g32fytz

2g32fytz2#

只需使用SIMILAR TO in PostgresREGEXP_LIKE in MySQL(取决于您的数据库引擎)而不是LIKE
例如,您的查询应如下所示:

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

相关问题