【问题标题】:Appending query string with multiple filters使用多个过滤器附加查询字符串
【发布时间】:2019-08-21 19:35:34
【问题描述】:

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

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

$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&amp;beertype_id=5&amp;brewery_id=2。当用户单独单击过滤器时,如何每次都添加新过滤器?例如,如果用户单击“IPA”,则会显示所有 IPA 产品,然后如果他们单击“Porter”,则会显示 Porter 和 IPA 产品。

【问题讨论】:

    标签: arrays laravel laravel-5 query-string laravel-routing


    【解决方案1】:

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

    <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);
    

    【讨论】:

    • 感谢您的回复,但是这只是获取 href 属性中的任何内容,我正在尝试获取它,以便查询字符串更改为用户单击的任何产品,如果这有意义吗?所以如果用户点击“IPA”,只会出现IPA产品,那么如果他们点击“Porter”,那么所有的Porter AND IPA产品都会出现?
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多