There are three tables
- workshops (column: id,name,phone,email)
- services (column: id, name)
- service_workshop (column: id, workshop_id, service_id, active)
Between tables workshops and services relationships many to many. For filtering in the model i use local scopes https://laravel.com/docs/8.x/eloquent#local-scopes
When choosing services on the front-end, I should get workshops that have the selected services active.But I don't get what I need(( Here is my method:
// Model Workshop
public function scopeWithFilters(Builder $query, array $filters)
{
// services dynamic value
$services = array_key_exists("services", $filters) ? $filters["services"] : [];
return $query->when(count($services), function ($query) use ($services) {
$query->whereIn('id', function ($query) use ($services) {
$query->select('workshop_id')
->from('service_workshop')
->where('active', true)
->whereIn('service_id', $services);
});
});
}
With $services = [1,2] , the condition whereIn('service_id', $services) returns worksop_id 2 and 3, but should be 3...Because workshop_id = 2 service_id = 2 contains active = 0
How to write a request correctly?
