Laravel MongoDB如何查询array类型列中包含指定值的记录
你原来的写法失效的原因:where('types', '=', $num)是要求types字段完全等于传入的$num值,而你的types是二维嵌套数组,需要匹配的是嵌套层级内的元素,完全相等的条件不可能命中,所以查询无结果。
以下是两种常用存储场景下的正确写法:
场景1:数据库为MongoDB(配合jenssegers/laravel-mongodb扩展使用)
两种可直接运行的写法:
- 链式调用查询
$searchValue = '4'; $result = Employee::where('types', 'elemMatch', function ($q) use ($searchValue) { $q->where('$', 'elemMatch', $searchValue); })->get();
- 原生查询语法
$searchValue = '4'; $result = Employee::whereRaw([ 'types' => [ '$elemMatch' => [ '$elemMatch' => [ '$eq' => $searchValue ] ] ] ])->get();
场景2:数据库为MySQL,types字段为JSON类型
使用MySQL内置的JSON_SEARCH函数实现:
$searchValue = '4'; $result = Employee::whereRaw( 'JSON_SEARCH(types, "one", ?) IS NOT NULL', [$searchValue] )->get();
两种写法都可以命中所有types二维数组中任意子数组包含搜索值的记录,和你预期的返回结果一致。
内容的提问来源于stack exchange,提问作者Sarah Manning
相关产品推荐
相关产品推荐

