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查詢。你可以發表你的評論作爲答案,我會接受它:) –