【问题标题】:Filter in laravel base on price根据价格过滤laravel
【发布时间】:2017-08-07 00:59:43
【问题描述】:

我想知道如何在我的应用程序中进行价格过滤?

我使用的是 laravel 5.4

我目前有这样的事情:

public function indexproduct(Request $request) {
      $query = Product::orderBy('created_at','desc');
      if($request->keyword){
          // This will only executed if you received any keyword
          $query = $query->where('title','like','%'.$keyword.'%');
      }
      if($request->min_price && $request->max_price){
          // This will only executed if you received any price
          // Make you you validated the min and max price properly
          $query = $query->where('price','>=',$request->min_price);
          $query = $query->where('price','<=',$request->max_price);
      }
      $products = $query->paginate(6);
      return view('frontend.shop', compact('products'));
    }

查看:

<form class="form-inline" action="{{route('shop')}}" method="GET">
          Min <input class="form-control" type="text" name="min_price">
          Max <input class="form-control" type="text" name="max_price">
          Keyword <input class="form-control" type="text" name="keyword" >
          <input class="btn btn-default" type="submit" value="Filter">
      </form>

这将显示我的产品。我还想在我的产品顶部添加过滤器选择框,让用户过滤结果。

更新:现在将加载页面但没有结果,它只是刷新 页面!

【问题讨论】:

  • 你尝试了什么?你传递的是什么变量?
  • 目前没有!因为我不知道怎么做!
  • 检查我的答案。我希望您能提供更多信息,例如模型、表名、与问题相关的视图。
  • 如果你正确调用了 paginate(5),则不应显示该错误

标签: php laravel


【解决方案1】:

首先,您应该创建一个可以放置所有过滤器的表单。

<form action="{{ url('url/to/your/indexproduct')}}" method="GET">
    <input type="text" name="min_price">   //User can input minimum price here
    <input type="text" name="max_price">  //User can input maximun price here
    <input type="text" name="keyword" >  // User can input name or description
    <input type="submit" value="Filter">
</form>

之后,您的控制器将在单击提交按钮后从该表单接收数据。所以如果你想检查它。这样做。

public function indexproduct(Illuminate\Http\Request $request) {
    dd($request->all())  // This will show all your filters
}

然后,当您的数据已发送到您的控制器时,您应该修改您的查询并包含您的过滤器。 (有很多方法可以做到这一点,但这是一个简单的方法)

public function indexproduct(Illuminate\Http\Request $request) {
    $query = Product::orderBy('created_at','desc');
    if($request->keyword){
        // This will only execute if you received any keyword
        $query = $query->where('name','like','%'.$keyword.'%');
    }
    if($request->min_price && $request->max_price){
        // This will only execute if you received any price
        // Make you you validated the min and max price properly
        $query = $query->where('price','>=',$request->min_price);
        $query = $query->where('price','<=',$request->max_price);
    }
    $products = $query->paginate(5);
    return view('frontend.shop', compact('products'));
}

希望对你有帮助。

【讨论】:

  • 好的兄弟,现在我收到此错误Method links does not exist. 等一下,我也会更新我的问题。
  • 我修改了我的答案,我忘记了你的分页。 $products = $query-&gt;paginate(5); 。你的错误可能是分页。
  • 现在将加载页面但没有结果,它只是刷新页面!
  • @romnik-susa 有什么想法吗?
猜你喜欢
  • 2017-06-09
  • 2018-02-14
  • 2017-08-08
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多