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);
        });
    }
});
Другие вопросы по тегам