【发布时间】:2018-06-09 12:51:00
【问题描述】:
我正在尝试查询包含值数组的 JSON 字段。 例如,我们将表命名为“User”和字段“Friends”。 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"
}
绝望,即使我知道这不是很合乎逻辑,我也尝试过使用“whereIn”: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() 和许多不同的变体,但没有任何效果。
在来这里之前,我已经阅读了一些关于这个问题的有趣文章(它们在下面列出),但我似乎是唯一一个在 MySQL 数据库中存储 JSON 数组的人,这怎么可能? ^^
- https://mattstauffer.com/blog/new-json-column-where-and-update-syntax-in-laravel-5-3/
- https://themsaid.com/laravel-mysql-json-colum-fast-lookup-20160709
- http://www.qcode.in/use-mysql-json-field-in-laravel/
因此,如果有人可以帮助我解决这个问题,我将不胜感激。 旁注:我当前的 MySQL 版本是 5.7.11,所以它确实支持 JSON 字段并且 Laravel 不会抛出任何错误,它只是返回一个空数组。
【问题讨论】:
标签: php mysql sql json laravel