如何在Laravel中查询PostGre中的JSON数据

时间:2017-05-17 16:28:30

标签: php postgresql laravel-5

所以在我的表中有一个criteria列,条件内的数据看起来像这个

{
    "maxAq": 146461,
    "minAq": 109839,
    "validEnd": {
        "date": "2018-04-04 00:00:00.000000",
        "timezone": "UTC",
        "timezone_type": 3
    },
    "acceptEnd": {
        "date": "2018-04-05 00:00:00.000000",
        "timezone": "UTC",
        "timezone_type": 3
    },
    "supplierId": 3,
    "validStart": {
        "date": "2017-04-04 00:00:00.000000",
        "timezone": "UTC",
        "timezone_type": 3
    },
    "acceptStart": {
        "date": "2017-04-05 00:00:00.000000",
        "timezone": "UTC",
        "timezone_type": 3
    },
    "distributor": 22,
    "productType": "gas"
}

现在我正在尝试查询validStart我正在使用laravel的行

查询看起来像这样

if($request->validStart !='')
          $result->where('criteria->validStart->date','=',$request->validStart);
$r = $result->where('criteria->productType','=',"gas")->take(20)->get();

        return Response::json($r);

所以基本上我正在努力做这样的事情

criteria->validStart->date = date

但即使有确切日期的行数很少,我的结果也是空的。

网址就像这样

price_filter_gas/?distributor=22supplierId=3&validStart=2017-04-04

如果你能检查json它确实有所有这些参数

欢迎任何建议

感谢

1 个答案:

答案 0 :(得分:0)

您可以先将列名称指定给变量:

$col1 = 'criteria' . '->' . 'validStart' . '->' . 'date';
$col2 = 'criteria' . '->' . 'productType';

然后在where子句中使用它

$result->where($col1,'=',$request->validStart);
$r = $result->where($col2,'=',"gas")->take(20)->get();

由于Laravel在生成sql时添加引号的奇怪方式,这是我能够让它工作的唯一方法。