JSON 带有查询生成器的值数组的 Where 子句

JSON Where Clause on array of values with Query Builder

这是 things table 的 data 列中的 JSON 值:

{a: [{b: 1}, {b: 2}]}

我可以得到所有 things 包含等于 1 的 b,原始查询如下:

select * from things where data @> '{ "a": [{"b": 1}] }';

我知道我们可以 运行 使用 Laravel 查询 JSON where 子句 Laravel: https://laravel.com/docs/5.4/queries#json-where-clauses。我可以这样写:

Thing::where('a->c', 'foobar');

但是我可以写一个 where 来检查 a 是否包含 {b: 1} 就像在使用 Laravel 的查询生成器的原始查询中一样吗?

Laravel (as of now) 在这些 "JSON where clauses" 中使用 ->->> 运算符(至少对于 PostgreSQL)。这不是你想要的。

但是PostgresGrammar直接支持@><@运算符,所以你可以这样写:

Thing::where('data', '@>', '{"a":[{"b":1}]}')