JSON Where 子句与查询生成器的值数组
问题:JSON Where 子句与查询生成器的值数组 这是things表的data列中的 JSON 值: {a: [{b: 1}, {b: 2}]} 我可以使用这样的原始查询获取所有包含b的things等于 1: select * from things where data @> '{ "a": [{"b": 1}] }'; 我知道我们可以使用 Laravel 使用带有 JSON where 子
·
问题:JSON Where 子句与查询生成器的值数组
这是things
表的data
列中的 JSON 值:
{a: [{b: 1}, {b: 2}]}
我可以使用这样的原始查询获取所有包含b
的things
等于 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');
但是我可以写一个 where 来检查a
是否包含{b: 1}
就像在 Laravel 的查询生成器的原始查询中一样?
解答
Laravel(现在是)在这些“JSON where 子句”中使用->
和->>
运算符(至少对于 PostgreSQL)。这不是你想要达到的。
但是PostgresGrammar
直接支持@>
和<@
运算符,所以你可以这样写:
Thing::where('data', '@>', '{"a":[{"b":1}]}')
更多推荐
已为社区贡献19918条内容
所有评论(0)