Laravel: как отфильтровать красноречивые данные по отношениям
Я создаю каталог товаров в laravel, и я хотел бы отфильтровать товары по их атрибутам.
У меня есть 2 таблицы, продукты и атрибуты. Атрибуты имеют ключ, значение и product_id. Например:
product_id - key - value
12 - brand - BestBrandEver
23 - brand - EvenBetterBrand
Теперь я хотел бы иметь возможность отфильтровывать свои продукты с помощью формы на странице категории, которая передает параметры строки запроса, такие как "brand=BestBrandEver или brand=EvenBetterBrand", и извлекает только продукты этого бренда. В конце концов, я хотел бы сделать то же самое с цветом, материалом и т. Д. Это очень похоже на многоуровневую навигацию Magento или Woocommerce.
Я застрял на некоторое время, потому что я не знаю, как начать строить это правильно. Есть ли кто-то, кто мог бы помочь мне в этом или может указать мне правильное направление (возможно, даже с помощью учебника или видео)?
Заранее спасибо!
1 ответ
Предполагая URL-адрес, как это:
/products?filters[brand][]=a&filters[brand][]=b&filters[color][]=a&filters[color][]=b
и так далее...
Использовать whereHas
Способ ограничения ваших товаров по их атрибутам:
Product::whereHas('attributes', function ($query) {
foreach (Input::get('filters') as $key => $values) {
$query->orWhere(function($query) use ($key, $values) {
$query->where('key', $key)->whereIn('value', $values);
});
}
});