Laravel项目中MSSQL JSON字段查询返回null问题求助
解决MSSQL中双层嵌套JSON数组的查询问题
你的updated_value字段存的是双层嵌套数组(示例值是[[{...}]]),直接用updated_value->phone_number根本定位不到目标字段——因为路径没考虑数组的层级,所以查不到结果返回null。
给你两种可行的解决方式:
方式一:用MSSQL的OPENJSON解析嵌套数组
通过OPENJSON逐层展开数组,再匹配字段,Laravel里用whereRaw实现:
$existing = ContactChangeLogs::latest() ->whereRaw("EXISTS ( SELECT 1 FROM OPENJSON(updated_value) AS j1 CROSS APPLY OPENJSON(j1.value) AS j2 WHERE j2.value->>'$.phone_number' = '5555555555' )") ->first();
这种方式适合外层数组可能有多个元素的情况,能遍历所有嵌套项匹配。
方式二:指定JSON路径直接匹配
如果你的数据结构固定,外层数组只有一个元素(像示例里的[[{...}]]),可以直接写完整的JSON路径:
// 用Laravel的whereJsonContains $existing = ContactChangeLogs::latest() ->whereJsonContains('updated_value[0][0].phone_number', '5555555555') ->first(); // 或者用whereRaw结合JSON_VALUE函数 $existing = ContactChangeLogs::latest() ->whereRaw("JSON_VALUE(updated_value, '$[0][0].phone_number') = '5555555555'") ->first();
内容的提问来源于stack exchange,提问作者Geethu
相关产品推荐
相关产品推荐

