我有这种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中使用此查询
答案 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
。然后查询将返回满足条件的表中的完整行。