【问题标题】:find inside json array in laravel在 laravel 的 json 数组中查找
【发布时间】:2020-04-03 09:18:49
【问题描述】:

我在 MySql 表列中有一个名为“more_data”的列,它包含 json 数组:

[{
    "notes": null,
    "status": 0,
    "type_id": 1,
    "start_id": 1001
},
{
    "notes": null,
    "status": 1,
    "type_id": 2,
},
{
    "notes": null,
    "status": 1,
    "type_id": 3,
},
{
    "notes": null,
    "status": 1,
    "type_id": 4,
}]

我只需要从查询中获取这个 JSON,但只是状态为 1 的地方。 所以我不想得到第一个元素。 有办法吗?

谢谢。

【问题讨论】:

  • "及其包含 json 数组" 作为字符串还是 MySQL JSON 字段?
  • 从 MySQL 获得上述 JSON 之后。您必须使用 foreach 循环在 php 中解析它以获取特定记录。
  • @kerbholz mysql json 字段 (mysql 8)
  • 请输入控制器代码。

标签: php mysql arrays json laravel


【解决方案1】:

试试这个

$a=YourModel::find($id);
$b=$a->more_data;
        $data=[];
        foreach($b as $c)
        {
            if(($c['status'])==1)
            {
                $data[]=$c;
            }
        }
dd($data);

【讨论】:

    【解决方案2】:

    如果 "more_data" 列是 JSON 类型,您可以通过 whereJsonContains() 函数获取值。 https://laravel.com/docs/5.8/queries#json-where-clauses

    否则,您必须解码 JSON 并过滤数组。

    【讨论】:

    • 这是 JSON 字段 (mysql8) 但 whereJsonContains 对我不起作用..
    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 2018-12-04
    • 2016-11-11
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多