@igor--ok

Как получить товары в категории по условию?

Доброго дня!
у меня проект на Laravel. Опишу упрощённо, чтобы разобраться только в проблеме.
В базе данных есть таблицы:
categories - категории товаров;
products - товары (в таблице products указан category_id);
filters - свойства товаров (производитель, материал, диаметр и т.п.)
filter_items - возможные значения этих свойств (Tefal, Rowenta, LG) c привязкой какое значение к какому фильтру;
category_filters - какие фильтры свойственны каждой категории (например, для сковородок это производитель, диаметр и наличие ручки)
product_filter_items - это уже конкретные свойства каждого товара.

Я в контроллере получаю категорию:
$category = Category::find($id);
return view('category', compact('category'));

В представлении мне нужно вывести перечень фильтров, свойственных этой категории и в каждом фильтре доступные значения (то есть только те, которые присущи хотя бы одному товару из этой категории, т.е. есть в таблице product_filter_items).
Но пока что я вывожу все возможные значения.
@foreach($category->filters as $filter)
<h3>{{$filter->name}}</h3>
@foreach($filter->items as $item)
<input type="checkbox" name="filters[{{$filter->id}}][]" id="check{{$item->id}}">
<label for="check{{$item->id}}">{{$item->name}}</label>
@endforeach
@endforeach

Что-то типа этого:
5ef4cf9998419651150365.png
Как бы мне исключить те значения, к которым не относится ни один товар?
Я пытался писать в модели Filter:
public function getCatItemsAttribute($category_id){
//здесь бы я по $category_id достал только нужные значения
//return ......
    }

, чтобы можно было в представлении перебрать так:
@foreach($filter->сatItems as $item)
<input type="checkbox" name="filters[{{$filter->id}}][]" id="check{{$item->id}}">
<label for="check{{$item->id}}">{{$item->name}}</label>
@endforeach

Можно как-то передать id категории в getCatItemsAttribute? типа
$filter->сatItems($category->id) as $item
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы