Не работает 2+ фильтра под одним whereHas laravel
Объединил все фильтры под один whereHas, т.к. из-за каждого whereHas добавлялся exists на каждый запрос, что очень сильно замедляло работу запроса:
public function filterByProperties(array $filters): void
{
$this->builder->whereHas('properties', function ($query) use ($filters) {
foreach ($filters as $propertyName => $value) {
if (!empty($value)) {
$propertyIds = DB::table('properties')
->where('name', $propertyName)
->pluck('id');
$query->whereIn('property_id', $propertyIds)
->where('value', $value);
}
}
});
}
Таблицы products, properties, product_properties, первые две связаны через третью смежную belongsToMany.
Вот один из нескольких фильтров в блейде:
<div>
@foreach($carBodies as $carBody)
<h5>{{ $carBody->name }}</h5>
@foreach($carBody->propertiesList as $property)
<div class="form-check m-2">
<input
class="form-check-input"
type="radio"
name="filter_by_properties[Кузов][]"
value="{{ $property->value }}"
id="car_body_{{ Str::slug($property->value) }}">
<label
class="form-check-label"
for="car_body_{{ Str::slug($property->value) }}">
{{ $property->value }}
</label>
</div>
@endforeach
@endforeach
</div>
Проблема: когда выбираю 1 фильтр, все работает, стоит выбрать 2 и больше, фильтры не срабатывают и появляется чисто белая страница