Php фильтр товаров на laravel?

Всем доброго времени суток.
Встала задача написать фильтр по параметрам для сайта на базе laravel.
Сделал следующую реализацию:
Таблицы: products, params, values и product_value.
Таблица params связана с values и values связана с products.
Каждый параметр имеет несколько значений и каждый продукт имеет несколько значений.
Связь реализована с помощью функций eloquent hasMany и belongsToMany.
Выборка происходит следующим образом:
В блоке параметров с помощью foreach выводятся значения для каждого параметра. Пользователь выбирает параметры, эти данные отправляются на сервер в виде массива.
Дальше происходит обход этого массива посредством foreach. На каждую итерацию происходит выборка записей из БД, которые имеют значение параметра, записанного в текущий элемент массива.
Таким образом получаем другой, уже двумерный, массив с массивами идентификаторов подходящих продуктов. Потом с помощью функции схождения массивов выбираются продукты подходящие по всем параметрам. Они впоследствие и выводятся пользователю.

Вопрос заключается в следующем. Имеется ли более легкая реализация в плане нагрузки на сервер и можно ли сделать это как-нибудь более просто? Хоть мой вариант вроде бы максимально универсальный, но, что-то мне подсказывает, не рациональный.
  • Вопрос задан
  • 1897 просмотров
Решения вопроса 1
galk_in
@galk_in
Backend Developer
Если я правильно понимаю у вас с фронтенда приходит массив значений из таблицы values.
Вариант 1: через Has Many Through не получить products которые с ними связаны, а потом не пересечь коллекции?
Вариант 2: сделать Scope который по массиву values получает все товары у которых такие значения.

Возможно я не правильно понимаю и у нас с фронтенда приходит верхнее и нижнее значения для каждого из params - тогда только вариант 2.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы