Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Релятивный фильтр
Форумы портала PHP.SU » » Работа с СУБД » Релятивный фильтр

Страниц (1): [1]
 

1. Igon - 28 Сентября, 2016 - 05:27:54 - перейти к сообщению
Добрый день, пишу для сайта умный фильтр по аналогии Яндекс.Маркета.
Собственно уже который день озадачился вопросом реализация релятивного фильтра.
Что имеем:
Динамическую форму: (Форма генерируется автоматически, но для наглядности вставил HTML)
CODE (text):
скопировать код в буфер обмена
  1. <form method="get" action="">
  2. <div>
  3. <label>Asus</label>
  4. <input type="checkbox" name="filter[]" value="Asus">
  5. <label>Acer</label>
  6. <input type="checkbox" name="filter[]" value="Acer">
  7. <label>Lenovo</label>
  8. <input type="checkbox" name="filter[]" value="Lenovo">
  9. </div>
  10. <div>
  11. <label>2015</label>
  12. <input type="checkbox" name="filter[]" value="2015">
  13. <label>2014</label>
  14. <input type="checkbox" name="filter[]" value="2014">
  15. <label>2013</label>
  16. <input type="checkbox" name="filter[]" value="2013">
  17. </div>
  18. <button>Искать</button>
  19. </form>

После сабмита формы имеется url следующего вида:
CODE (text):
скопировать код в буфер обмена
  1. site.com?filter=Asus&filter=2015

Так же имеем таблицы в базе данных:
CODE (text):
скопировать код в буфер обмена
  1. products (id, title)
  2. products_to_filter (id, product_id, filter_id)

Сам обработчик выглядит следующим образом (P.S фреймворк Laravel)
CODE (text):
скопировать код в буфер обмена
  1.  
  2. Выборка соответствующих фильтров.
  3. $filter[] = explode(',', $request->input('filter');
  4. $filters = DB::table('products_to_filter')->whereIn('id', $filter)
  5. ->get()
  6. ->all();
  7. foreach($filters as $row) {$filterArray[] = $row->product_id;}
  8. Выборка продуктов:
  9. $products = DB::table('products')->whereIn('id', $filterArray)->get()->all();

Собственно моя проблема заключается в следующем, фильтр работает, но не совсем так как мне нужно, тобишь при фильтрации, он должен результаты уменьшать, а он же наоборот ищет более углубленно, и как следствие увеличивает кол-во результатов. Как решить данную проблему?

 

Powered by ExBB FM 1.0 RC1