I have a database column called support_tags
. This is a jsonb column containing a simple array that looks like:
JavaScript
x
[
"caring",
"budgets",
"careers_employment",
"addictions"
]
I am attempting to query this column using the following:
JavaScript
$services = AppModelsService::where("status", "accepted")->whereRaw("JSON_CONTAINS(support_tags, '" . json_encode($categories) . "')")->get();
This doesn’t retrieve the results I am hoping for/expecting. If I send the following array:
JavaScript
[
"caring",
"smoking"
]
The results I get back are services that contain all array elements. I need this to work more like a whereIn
, in that not all array values need to be present in the database column, but one or more. If anyone knows of a way to do this I’d be very grateful. Thanks.
Advertisement
Answer
you can use these eloquent methods: ->whereJsonContains()
and ->orWhereJsonContains()
your query will be like this:
JavaScript
$services = AppModelsService::where("status", "accepted")
->where(function($query) {
$query->whereJsonContains('support_tags', 'smoking')
->orWhereJsonContains('support_tags', 'caring');
});