Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 28.09.2016 12:44:54

Igon

Релятивный фильтр

Добрый день, пишу для сайта умный фильтр по аналогии Яндекс.Маркета. Собственно уже который день озадачился вопросом реализация релятивного фильтра.

Что имеем:

Динамическую форму: (Форма генерируется автоматически, но для наглядности вставил HTML)

<form method="get" action="">
<div>
<label>Asus</label>
<input type="checkbox" name="filter[]" value="Asus">
<label>Acer</label>
<input type="checkbox" name="filter[]" value="Acer">
<label>Lenovo</label>
<input type="checkbox" name="filter[]" value="Lenovo">
</div>
<div>
<label>2015</label>
<input type="checkbox" name="filter[]" value="2015">
<label>2014</label>
<input type="checkbox" name="filter[]" value="2014">
<label>2013</label>
<input type="checkbox" name="filter[]" value="2013">
</div>
<button>Искать</button>
</form>

После сабмита формы имеется url следующего вида:

site.com?filter=Asus&filter=2015

Так же имеем таблицы в базе данных:

products (id, title)
products_to_filter (id, product_id, filter_id)

Сам обработчик выглядит следующим образом

Выборка соответствующих фильтров.

$filter[] = explode(',', $request->input('filter');
$filters = DB::table('products_to_filter')->whereIn('id', $filter)
->get()
->all();
foreach($filters as $row) {$filterArray[] = $row->product_id;}
Выборка продуктов:
$products = DB::table('products')->whereIn('id', $filterArray)->get()->all();

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

#2 28.09.2016 12:53:57

Re: Релятивный фильтр

  1. $filter[] = explode(’,’, $request->input(’filter’);

Это что за конструкция?
$request->get(’filter’) уже массив вернет, если форма такая, как ты описал

Не в сети

Подвал раздела