Laravel 8 如何正确查询JSON字段中line_items包含指定vendor值的记录
正确实现方案
你之前的写法存在两个核心问题:
- 逻辑符使用错误:
orWhereJsonContains会将查询条件变为「id匹配 或 JSON字段满足条件」,不符合你要同时匹配两个条件的需求,应改用whereJsonContains - JSON路径规则错误:
whereJsonContains查询JSON数组内嵌套对象的指定字段时,路径只需指定到数组层级,第二个参数传入需要匹配的键值对结构即可。
Laravel框架下的正确查询代码如下:
$val = 'Samsung-1'; $records = Test::where('id', '4030662213806') ->whereJsonContains('test->line_items', ['vendor' => $val]) ->get();
注意事项
- 该查询依赖数据库的JSON查询支持,MySQL需要5.7及以上版本,PostgreSQL、SQL Server等主流数据库的近年版本也均支持该特性
- 如果你不需要限定id条件,仅筛选所有
line_items中存在对应vendor的记录,直接删除第一个where条件即可
内容的提问来源于stack exchange,提问作者pawan
相关产品推荐
相关产品推荐

