首页 > 解决方案 > laravel 过滤器返回所有记录

问题描述

我尝试使用三个输入进行搜索,在第一种情况下,当我使用所有输入进行搜索时,它会返回结果,在第二种情况下,当我仅使用一个字段进行搜索时,它会返回所有记录我想要做的是当我搜索时对于一个字段,它会返回一个特定的结果,

public function multiSearch(Request $request){
        $search   = $request->input('search');
        $search_1 = $request->input('search_1');
        $search_2 = $request->input('search_2');
        $cars = Car::query()
            ->where('price', 'LIKE', "%{$search}%")
            ->orWhere('model', 'LIKE', "%{$search_1}%")
            ->orWhere('transmission', 'LIKE', "%{$search_2}%")
        ->get();

        return view('car.car-multisearch', ['cars'=>$cars]);
    }

这是我的刀片代码

<form type="get" action="{{url('/search-car')}}">
  @csrf
     <div class="row">
          <div class="col-md-4">
            <p>
               <input type="text" name="search" placeholder="Price" />
            </p>
     </div>
      <div class="col-md-4">
         <p>
          <input type="text" name="search_1" placeholder="Model Year" />
         </p> 
      </div>
      <div class="col-md-4">
         <p>
          <select name="search_2">
              <option  data-display="Transmission">Transmission</option>
              <option value="Automatic">Automatic</option>
             <option value="Manual">Manual</option>
          </select>
        </p>
        </div>
      <button type="submit" class="gauto-theme-btn">Find Car</button>
   </div>
</form>

标签: phpmysqlsearchlaravel-8

解决方案


您可以根据请求中存在的值以及它们是否不为空,动态地将 where 语句添加到查询中。例子:

public function multiSearch(Request $request){
    $cars = Car::query();
    
    if ( $request->filled('search') ) {
        $cars->where('price', 'LIKE', "%{$request->input('search')}%");
    }

    if ( $request->filled('search_1') ) {
        $cars->orWhere('model', 'LIKE', "%{$request->input('search_1')}%");
    }

    if ( $request->filled('search_2') ) {
        $cars->orWhere('transmission', 'LIKE', "%{$request->input('search_2')}%");
    }

    return view('car.car-multisearch', ['cars'=> $cars->get() ]);
}

这个解决方案可以完成这项工作,但看起来并不好,因为您需要为每个过滤器添加更多 if 语句。)


推荐阅读