在 Yii 2.0 中,查询构建器中定义 WHERE 条件,操作符为 LIKE 时生成 SQL 语句以 “vtt_” 开始的实现

1、期待生成的 SQL 语句,如图1

图1

SELECT * FROM `channel-pub-api`.`cpa_channel_type` WHERE `code` LIKE 'vtt_%'

2、like:第一个操作数应为一个字段名称或 DB 表达式, 第二个操作数可以使字符串或数组, 代表第一个操作数需要模糊查询的值。比如,[‘like’, ‘name’, ‘tester’] 会生成 name LIKE ‘%tester%’。 如果范围值是一个数组,那么将会生成用 AND 串联起来的 多个 like 语句。例如,[‘like’, ‘name’, [‘test’, ‘sample’]] 将会生成 name LIKE ‘%test%’ AND name LIKE ‘%sample%’。 你也可以提供第三个可选的操作数来指定应该如何转义数值当中的特殊字符。 该操作数是一个从需要被转义的特殊字符到转义副本的数组映射。 如果没有提供这个操作数,将会使用默认的转义映射。如果需要禁用转义的功能, 只需要将参数设置为 false 或者传入一个空数组即可。需要注意的是, 当使用转义映射(又或者没有提供第三个操作数的时候),第二个操作数的值的前后 将会被加上百分号。代码如下

ChannelType::find()
    ->select(ChannelType::tableName() . '.code')
    ->where(['like', 'code', 'vtt_%', false])
    ->asArray()
    ->column();

3、最终生成的 SQL 语句,符合预期,如图2

图2

SELECT `cpa_channel_type`.`code` FROM `cpa_channel_type` WHERE `code` LIKE 'vtt_%'
永夜