Yii2操作MongoDB做OR模糊查询无结果或报Illegal offset type错误
错误原因分析
- 第一次查询返回空白:
Yii2的MongoDB扩展不兼容MySQL风格的like写法,你额外加的第四个参数false是MySQL查询专用的取消参数绑定配置,MongoDB的查询构建器不识别该参数,同时MongoDB也不使用%作为模糊匹配通配符,最终生成的查询条件不符合MongoDB语法,所以返回空结果。 - 第二次抛出
Illegal offset type错误:
MongoDB原生的$or操作符在Yii2的查询条件中需要作为关联数组的键,不能直接作为索引数组的第一个元素,你写的['$or', ...]结构不符合要求,PHP尝试把后续条件作为数组键解析时类型不匹配,就抛出了该错误。
正确实现方式
这里提供两种可用写法:
写法1:使用Yii2 MongoDB扩展封装的LIKE语法
扩展会自动将like转换为MongoDB兼容的$regex查询,无需额外加通配符和参数:
$model = Querytest::find()->where([ 'or', ['like', 'title', $key], ['like', 'keyword', $key] ])->all(); return $model;
写法2:直接使用MongoDB原生查询语法
可控性更高,可自行配置正则匹配规则:
$model = Querytest::find()->where([ '$or' => [ ['title' => ['$regex' => $key, '$options' => 'i']], // $options加i表示不区分大小写,不需要可删除 ['keyword' => ['$regex' => $key, '$options' => 'i']] ] ])->all(); return $model;
内容的提问来源于stack exchange,提问作者im-learning
相关产品推荐
相关产品推荐

