您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在包含JSON数组的JSON字段上进行Laravel 5.4查询

在包含JSON数组的JSON字段上进行Laravel 5.4查询

您的whereRaw尝试非常接近。如果存储单个对象,则路径为$.id。但是,由于要存储对象数组,因此路径为$[*].id。这应该为您工作:

User::whereRaw('JSON_CONTAINS(friends->"$[*].id", "3")')->get();

friends->"$[*].id"选择器(这是这个的快捷方式JSON_EXTRACT())将返回的ID的JSON数组。JSON_CONTAINS()然后将检查该json数组是否包含指定的ID。

一个选择是构建用于的json搜索字符串JSON_CONTAINS()。例如,此查询也应工作:

User::whereRaw('JSON_CONTAINS(friends, \'{"id": 3}\')')->get();

这样避免了第一次调用JSON_EXTRACT(),因此您只调用一个json方法。我不知道哪个版本实际上会更快,或者是否会有任何差异。

另外,在与相关的旁注中JSON_SEARCH(),此功能仅在您搜索字符串值时才有效。由于您的json显示ID是用整数而不是字符串表示的,因此JSON_SEARCH()将不起作用。MysqL声称这是预期的行为(错误79233dup错误79316)。

仅供参考,以下是json搜索方法的文档

其他 2022/1/1 18:20:14 有542人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶