JSON Where使用Query Builder对值数组进行Clause

时间:2017-05-05 08:34:19

标签: postgresql laravel laravel-5 laravel-5.4 postgresql-json

以下是data表的things列中的JSON值:

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

我可以使用这样的原始查询得到包含things的所有b等于1:

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');

但我可以在Laravel的查询生成器的原始查询中写一个检查a是否包含{b: 1}的位置吗?

1 个答案:

答案 0 :(得分:1)

Laravel(as of now)与->->>运算符一起使用这些" JSON where子句" (至少对于PostgreSQL而言)。这不是你想要达到的目标。

PostgresGrammar直接支持@><@运算符,因此您可以写:

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