Laravel 搜索逻辑

Laravel search logic

在过去的两天里,我一直在尝试构建这个相对简单的搜索系统,但我就是想不通。 基本上,我有几个 select 标签,其中包含用于过滤用户的选项。 像这样:

  <div class="col-sm-4">
    <label for="price">Price:</label><br>
    <select class="browse-select" name="price">
      <option>Any</option>
      <option value="1">Less than 100$</option>
      <option value="2">More than 100$</option>
    </select>
  </div>

  <div class="col-sm-4">
    <label for="delivery">Delivery:</label><br>
    <select class="browse-select" name="delivery">
      <option>Any</option>
      <option value="1">1 month or less</option>
      <option value="7">7 days or less</option>
      <option value="3">3 days or less</option>
    </select>
  </div>

这些在表格中(获取请求表格),这是我的控制器。

public function index(Request $request){

  $users = User::paginate(10);
  $service = Service::all();

  //Search Logic

  $category = $request->input('category');
  $price = $request->input('price');
  $delivery = $request->input('delivery');

  $searchQuery = Service::with('user');

  $searchQuery->where('category','=',$category);

  if ($price == 1) { //price input has a value of 1 which means (less than 100)
    $searchQuery->where('price','<',100)->where('category','=',$category);
  }elseif($price == 2){
    $searchQuery->where('price','>',100)->where('category','=',$category);
  }

  $result = $searchQuery->get();

  return view('browse.index', compact('users','service','result'));
}

如您所见,我在用户和服务之间建立了关系。因为我需要访问用户的服务来比较值和查询数据库。

到目前为止,我所拥有的,仅适用于一个 select。如果我 select 一个类别,则可以正常工作并显示用户。但是,如果我尝试选择一个类别和价格,那么它 returns 所有用户。 我应该如何正确执行此操作?我觉得我在这里错过了一些东西..

我认为您需要添加额外的检查并拆分您的查询。像

$searchQuery = Service::with('user');

if($request->has('category'))
{
    $searchQuery->where('category', $request->input('category'));
}

if($request->has('price'))
{
    $operator = (1 === $request->input('price')) ? '>' : '<';

    $searchQuery->where('price', $operator, 100);
}

$result = $searchQuery->get();