代码之家  ›  专栏  ›  技术社区  ›  Bolek Lolek

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

  •  0
  • Bolek Lolek  · 技术社区  · 6 年前

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

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

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

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

    {"price": 500}
    
    0 回复  |  直到 6 年前
        1
  •  3
  •   Jonas Staudenmeir    6 年前

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

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