Добавление строки запроса с несколькими фильтрами - PullRequest
0 голосов
/ 31 марта 2019

У меня есть панель фильтров, которая ищет один фильтр за раз.Тем не менее, я хотел бы сделать это, чтобы выбрать несколько фильтров одновременно.Мои ссылки для фильтров в настоящее время имеют одну строку запроса.Есть ли способ добавить строку запроса с другим запросом?

В настоящее время я настраиваю свои фильтры в контроллере, как показано ниже:

$products = new Product();
$queries = [];

$columns = [
    'beertype_id', 'packaging', 'brewery_id'
];

foreach ($columns as $column) {
    if (request()->has($column)) {
        $products = $products->where($column, request($column));
        $queries[$column] = request($column);
    }
}

$products = $products->paginate(10)->appends($queries);

Затем я хочу вызвать их в шаблоне Blade.

<p>Filter Products:</p>
<a href="/products">Reset</a>
<ul>
    <p>Types of Beer:</p>
    <li class="filter-link"><a href="/products?beertype_id=1">IPA</a></li>
    <li class="filter-link"><a href="/products?beertype_id=2">Lager</a></li>
    <li class="filter-link"><a href="/products?beertype_id=3">Pale Ale</a></li>
</ul>
<ul>
    <p>Packaging:</p>
    <li class="filter-link"><a href="/products?packaging=bottle">Bottle</a></li>
    <li class="filter-link"><a href="/products?packaging=can">Can</a></li>
    <li class="filter-link"><a href="/products?packaging=keg">Keg</a></li>
</ul>
<ul>
    <p>Brewery:</p>
    <li class="filter-link"><a href="/products?brewery_id=2">Kinnegar</a></li>
    <li class="filter-link"><a href="/products?brewery_id=3">White Hag</a></li>
    <li class="filter-link"><a href="/products?brewery_id=4">Quilmes</a></li>
</ul>

Я хотел бы иметь строку запроса, например ?beertype_id=3&beertype_id=5&brewery_id=2.Когда пользователь нажимает на фильтры по отдельности, как я могу добавлять новый фильтр каждый раз?Например, если пользователь щелкнет «IPA», появятся все продукты IPA, а затем, если они нажмут «Porter», появятся оба продукта Porter и IPA.

1 Ответ

0 голосов
/ 31 марта 2019

Вы можете передать массив в запросе:

<p>Filter Products:</p>

<a href="/products">Reset</a>

<ul>
    <p>Types of Beer:</p>

    <li class="filter-link"><a href="/products?beertype_id[]=1&beertype_id[]=4" >IPA</a></li>
    <li class="filter-link"><a href="/products?beertype_id[]=2&beertype_id[]=5">Lager</a></li>
    <li class="filter-link"><a href="/products?beertype_id[]=3&beertype_id[]=6">Pale Ale</a></li>
</ul>

И получить этот массив в контроллере, как это

$products = new Product;


$queries = [];

$columns = [
    'beertype_id', 'packaging', 'brewery_id'
];

foreach ($columns as $column){
    if (request()->has($column)){
      if(is_array(request($column))){
        $products = $products->whereIn($column, request($column));
      } else {
        $products = $products->where($column, request($column));
      }

      $queries[$column] = request($column);
    }


}

$products = $products->paginate(10)->appends($queries);
...