Reputation: 31948
Here is a JSON value in a data
column of a things
table:
{a: [{b: 1}, {b: 2}]}
I can get all things
containing a b
that is equals to 1 with a raw query like this:
select * from things where data @> '{ "a": [{"b": 1}] }';
I know we can run query with Laravel with JSON where clause with Laravel: https://laravel.com/docs/5.4/queries#json-where-clauses. I can write something like:
Thing::where('a->c', 'foobar');
But can I write a where to check if a
contains {b: 1}
just like in the raw query with Laravel's Query Builder?
Upvotes: 4
Views: 1614
Reputation: 36214
Laravel (as of now) operates with the->
and ->>
operators in these "JSON where clauses" (at least, for PostgreSQL). This is not what you want to achieve.
But the PostgresGrammar
supports the @>
and <@
operators directly, so you could write:
Thing::where('data', '@>', '{"a":[{"b":1}]}')
Upvotes: 1