laravel - Eloquent json 字段 - 获取高于/低于某个值的记录

标签 laravel postgresql eloquent

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

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

作为响应,我得到了价格低于 2000 的元素。QueryBuilder 在数据库上运行它:

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

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

{"price": 500}

最佳答案

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

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

关于laravel - Eloquent json 字段 - 获取高于/低于某个值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59516190/

相关文章:

php - 如何让管理员在 laravel 中将特定类型的用户(学生)与另一种类型的用户(他们各自的导师)相匹配

php - 如何在laravel 5.1中访问子函数内父函数的参数

php - 无需用户注册的安全 API - php/Laravel

sql - 合并不评估第二个参数?

java - hibernate 不将条目保存到 postgresql 数据库

php - Laravel 4 - 选择相关模型

Laravel 5.4 更改默认用户名和密码字段

php - laravel 6 无法为作业队列设置延迟代码

php - 将 IN 运算符与 pg_prepare 一起使用

php - 在一对多关系 laravel 5 中保存多条记录