【问题标题】:Eloquent json field- get records higher/lower than some value雄辩的 json 字段 - 获取高于/低于某个值的记录
【发布时间】:2019-12-29 01:14:36
【问题描述】:

我的表中有 json 类型的列 data。该查询不起作用:

Advert::where('data->price', '>', 2000)->get();

作为回应,我得到了价格低于 2000 的元素。QueryBuilder 在 db 上运行:

SELECT * FROM "adverts" WHERE "data"->>'price' > '2000'

我不知道出了什么问题。看起来价格正在转换为字符串,但在数据库中保存为整数。

{"price": 500}

【问题讨论】:

  • 你能粘贴你的“config > database.php”设置吗?
  • 我有标准配置。在乔纳斯提出的改变之后,一切都如我所料。

标签: laravel postgresql eloquent


【解决方案1】:

PostgreSQL 将值作为字符串进行比较,从第一个字符开始。这就是 500 比 2000“高”的原因。您需要使用原始表达式将价格转换为整数:

Advert::where(DB::raw('("data"->>\'price\')::int'), '>', 2000)->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多