laravel - 雄辩的 json 字段 - 获取高于/低于某个值的记录
问题描述
我data
的表中有 json 类型的列。该查询不起作用:
Advert::where('data->price', '>', 2000)->get();
作为回应,我得到了价格低于 2000 的元素。QueryBuilder 在 db 上运行:
SELECT * FROM "adverts" WHERE "data"->>'price' > '2000'
我不知道出了什么问题。看起来价格正在转换为字符串,但在数据库中保存为整数。
{"price": 500}
解决方案
PostgreSQL 将值作为字符串进行比较,从第一个字符开始。这就是 500 比 2000“高”的原因。您需要使用原始表达式将价格转换为整数:
Advert::where(DB::raw('("data"->>\'price\')::int'), '>', 2000)->get();
推荐阅读
- r - 当我使用 as.dendrogram 时,叶子的标签没有完全显示
- c# - Windows 窗体应用程序中的开始位置属性
- reactjs - 使用useReducer时如何避免耦合?
- php - 如何使用 call_user_func 调用全局函数?
- java - 将 UTC 转换为 EST 时区
- javascript - 如何使用当前脚本应用自定义映射
- ios - 如何创建抽象函数以减少代码重复
- datetime - 日期转换处理 YYYY-MM-DD HH:MM:SS.SSS
- linux - 如何让linux机器在固定的时间内关闭
- java - 如何修复 Mockito 抛出“嵌套异常是 java.lang.NullPointerException”?