您的
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声称这是预期的行为(错误79233和dup错误79316)。
仅供参考,以下是json搜索方法的文档。



