【问题标题】:Laravel 5.4 query on a JSON field containing a JSON arrayLaravel 5.4 查询包含 JSON 数组的 JSON 字段
【发布时间】:2018-11-14 08:24:47
【问题描述】:

在 users 表中,我有一个名为“agencies”的 json 列,它将数据存储为一个简单的数组,如下所示:

[
"0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12",
"f7c748d4-8718-441e-aa69-91b890ead5ed"
],

以上是有效的 json。当我尝试选择包含 0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12 的所有用户时,我得到 null

我的查询正确吗?

$users = User::whereRaw('JSON_CONTAINS(agencies->"$[*]", "0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12")')->get();

考虑到我如何将 uuids 存储为定义为 json 的机构列中的数组,下面是编写 JSON 选择查询的正确方法吗?

'JSON_CONTAINS(agencies->"$[*]", "0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12"

我从阅读中得到了上述选择的想法:Making a Laravel 5.4 query on a JSON field containing a JSON array

但是那篇文章中的解决方案与我正在尝试做的不同,我对其进行的修改并没有给我任何用户,而是我总是得到 null 回来。

【问题讨论】:

    标签: php mysql json laravel


    【解决方案1】:

    我相信这就是你想要的:

    $users = User::whereRaw('JSON_CONTAINS(agencies, ?)', ['0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12'])->get();
    

    查询生成器也将很快支持它。 See PR

    【讨论】:

    • 这看起来像是正确的语法,但我仍然得到了 null 回复。想知道为什么会失败。
    【解决方案2】:

    MySQL 需要一个 JSON 字符串:

    $users = User::whereRaw('JSON_CONTAINS(agencies, ?)',
        ['"0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12"'])->get();
    $users = User::whereRaw('JSON_CONTAINS(agencies, ?)',
        [json_encode('0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12')])->get();
    

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多