【问题标题】:laravel filter return all the recordslaravel 过滤器返回所有记录
【发布时间】:2021-12-20 20:03:30
【问题描述】:

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

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>

【问题讨论】:

    标签: php mysql search laravel-8


    【解决方案1】:

    您可以根据values presence in the request and if they are not empty 动态地将 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 语句。)

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2019-12-27
      • 1970-01-01
      • 2023-03-10
      • 2015-11-05
      • 2018-05-17
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多