查询jsonb数组

时间:2019-02-08 05:29:34

标签: json laravel postgresql

我有这种json数组,我想检查value数组内的 stringValue 是否为null,或者我想用其 id 检查它fielddata 是列名

[
  {
    "name": "50a5613e97e04cb5b8d32afa8a9975d1",
    "value": {
      "stringValue": null
    }
  },
  {
    "name": "bb127e8284c84692aa217539c4312394",
    "value": {
      "dateValue": 1549065600
    }
  }
]

查询是:

select * 
from field 
WHERE (fielddata->>'name') = '50a5613e97e04cb5b8d32afa8a9975d1' 
   AND fielddata->'value'->>'stringValue' IS NOT NULL;

,我想在laravel5.7中使用此查询

2 个答案:

答案 0 :(得分:1)

尝试一下

$result = \DB::table('field')->where('name', "50a5613e97e04cb5b8d32afa8a9975d1" )->where('value', $stringValue)->get();

if(isset($result)){
    foreach($result as $res){
        if(isset($res['value']->stringValue)){
            // not null case
        }else{
            // null case
        }
    }
}

答案 1 :(得分:1)

在SQL查询中,我认为您想要这样的东西:

select t.*
from the_table t
where exists (select *
              from jsonb_array_elements(t.fielddata) as j(e)
              where e ->> 'name' = '50a5613e97e04cb5b8d32afa8a9975d1' 
                and e -> 'value' ->> 'stringValue' is not null);

existing子查询将检查每个数组元素,并查看至少一个元素是否具有指定的名称和非空的stringValue。然后查询将返回满足条件的表中的完整行。

在线示例:https://rextester.com/AGGJNR88809