小编Vic*_*UTT的帖子

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

我正在尝试查询包含值数组的JSON字段.例如,我们将表格命名为" 用户 "和" 朋友 " 字段.以下是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"
}]
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是在User表上查询来自Friends字段的所有内容,其中id等于3.

所以类似的东西:User::where('friends->id', 3)->orderBy('id', 'desc')->get(); 当然,如果字段不包含数组,上面的例子可以完美地工作,所以如果它只是:

{
    "id": 1,
    "img": "img-1.jpg",
    "name": "Name 1"
}
Run Code Online (Sandbox Code Playgroud)

绝望了,尽管我知道这是不是很符合逻辑,我试图用"其中": 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_CONTAINSJSON_SEARCH:User::whereRaw('JSON_CONTAINS(friends->"$.id", "3")')->get()和许多不同的变种,但没有做到.

来到这里之前我已经阅读了一些有关此事的有趣文章(它们列在下面),但我似乎是唯一一个曾在MySQL数据库中存储过JSON数组的人,这怎么可能?^^

所以,如果有人能帮我解决这个问题,我真的很感激.附注:我当前的MySQL版本是5.7.11,因此它支持JSON字段,而Laravel不会抛出任何错误,它只返回一个空数组.

php mysql sql json laravel

5
推荐指数
1
解决办法
5677
查看次数

标签 统计

json ×1

laravel ×1

mysql ×1

php ×1

sql ×1