Laravel Json在键值大于/小于的对象数组中进行列搜索

ohtdti5x  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(212)

我有一个laravel模型,它有一个名为“properties”的JSON列类型。

[
   {
      "quantity":4210,
      "price":"21247.10",
      "childs":[
         {
            "quantity":0.19814469,
            "price":"22329.70"
         }
      ]
   },
   {
      "quantity":1234,
      "price":"21247.10",
      "childs":[
         {
            "quantity":0.19814469,
            "price":"22329.70"
         }
      ]
   }
]

我需要在“价格”大于或小于另一个值的地方执行搜索。
如何实现呢?使用postgres和json列

1bqhqjot

1bqhqjot1#

PostgreSQL的优势之一是它是一个关系数据库,但你也可以通过在JSON列中存储内容来获得非结构化数据的优势。下面是你如何在PostgreSQL中查询JSON列:

-- Give me params.name (text) from the events table
select params->>'name' from events;

-- Find only events with a specific name
select * from events where params->>'name' = 'Click Button';

-- Give me the first index of a JSON array
select params->ids->0 from events;

-- Find users where preferences.beta is true (boolean)
-- This requires type casting preferences->'beta' from json to boolean
select preferences->'beta' from users where (preferences->>'beta')::boolean is true;

短箭头-〉保留JSON类型,长箭头-〉〉返回文本。
编辑
在您的情况下,您应该执行以下操作:

$users = DB::table('--your-table')
                ->where('properties->price', 'your comparison operator here', '--Your value here--')
                ->get();
bvjveswy

bvjveswy2#

$users = DB::table('tableName')
                ->where('properties->price', 'like', '%' . $request->search . '%')
                ->get();

它工作正常

相关问题