4
这里是一个things
表的data
列JSON值:JSON凡值的ARRAY子句与查询生成器
{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');
但我可以写一个地方,以检查是否a
包含{b: 1}
就像在Laravel的查询生成器的原始查询?
这[似乎Laravel与操作(https://github.com/laravel/framework/blob/7212b1e9620c36bf806e444f6931cf5f379c68ff /src/Illuminate/Database/Query/Grammars/PostgresGrammar.php#L256)这些“JSON where子句”中的' - >'和' - >>'操作符(这不是您想要实现的)。但是PostgresGrammar直接支持'@>'和'<@'运算符,所以(理论上)你可以编写' - > where('data','@>','{“a”:[{“b” :1}]}')' – pozs
@pozs我刚刚检查过,你的“理论”有效!非常感谢你,我没有想到这个,我正在写一个whereRaw查询。你可以发表你的评论作为答案,我会接受它:) –