使用多个过滤器附加查询字符串

问题描述 投票:0回答:1

我有一个过滤条,一次搜索一个过滤器。但是,我想要它一次选择多个过滤器。我的过滤器链接目前都有一个查询字符串。有没有办法用另一个查询附加查询字符串?

目前,我在控制器中设置我的过滤器,如下面的代码。

$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产品。

arrays laravel laravel-5 query-string laravel-routing
1个回答
0
投票

您可以在查询中传递数组:

<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);
© www.soinside.com 2019 - 2024. All rights reserved.