我正在尝试查询包含值数组的JSON字段。例如,我们将表命名为“ User ”,并将字段命名为“ Friends ”。这是“朋友”字段的外观:
[{
"id": 1,
"img": "img-1.jpg",
"name": "Name 1"
},
{
"id": 2,
"img": "img-2.jpg",
"name": "Name 2"
},
{
"id": 3,
"img": "img-3",
"name": "Name 3"
}]
因此,我想 在User表上查询来自Friends字段的所有内容,其中id等于3 。
就像这样:User::where('friends->id', 3)->orderBy('id', 'desc')->get();
当然,如果该字段不包含数组,那么上面的示例可以完美地工作,所以它只是:
{
"id": 1,
"img": "img-1.jpg",
"name": "Name 1"
}
绝望了,尽管我知道这是不是很符合逻辑,我试图用“其中”: User::whereIn('friends->id',
[3])->get()。或类似的东西:User::where('friends->[0]->id',
3)->get(),User::where('friends->[*]->id',
3)->get(),User::where('friends->*->id', 3)->get()。
我还尝试了 JSON_CONTAINS 或 JSON_SEARCH
:User::whereRaw('JSON_CONTAINS(friends->"$.id",
"3")')->get()和许多不同的变体,但没有任何作用。
在来到这里之前,我已经阅读了一些有趣的文章(下面列出了它们),但是我似乎是唯一将JSON数组存储在MySQL数据库中的人,这怎么可能?^^
因此,如果有人可以帮助我解决这个问题,我将不胜感激。注意事项:我当前的MySQL版本是5.7.11,因此它确实支持JSON字段,并且Laravel不会抛出任何错误,它只返回一个空数组。