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

这是一个事物表的数据列中的
JSON值:

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

我可以使用这样的原始查询来获取包含等于1的b的所有内容:

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

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

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

但是,我可以在Laravel的查询生成器的原始查询中写一个包含{b:1}的地方吗?

最佳答案 Laravel(
as of now)使用>进行操作.和 – >>运算符在这些“JSON where子句”中(至少对于PostgreSQL而言).这不是你想要达到的目标.

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

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