You need to enable JavaScript to run this app. Yii2操作MongoDB做OR模糊查询无结果或报Illegal offset type错误
优惠活动
大模型
产品
解决方案
定价
更多

Yii2操作MongoDB做OR模糊查询无结果或报Illegal offset type错误

错误原因分析

  1. 第一次查询返回空白:
    Yii2的MongoDB扩展不兼容MySQL风格的like写法,你额外加的第四个参数false是MySQL查询专用的取消参数绑定配置,MongoDB的查询构建器不识别该参数,同时MongoDB也不使用%作为模糊匹配通配符,最终生成的查询条件不符合MongoDB语法,所以返回空结果。
  2. 第二次抛出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 11:18:00