以下是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}
的位置吗?
答案 0 :(得分:1)
Laravel(as of now)与->
和->>
运算符一起使用这些" JSON where子句" (至少对于PostgreSQL而言)。这不是你想要达到的目标。
但PostgresGrammar
直接支持@>
和<@
运算符,因此您可以写:
Thing::where('data', '@>', '{"a":[{"b":1}]}')