laravel 过滤器返回所有记录

Posted

技术标签:

【中文标题】laravel 过滤器返回所有记录【英文标题】:laravel filter return all the records 【发布时间】: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>

【问题讨论】:

【参考方案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 语句。)

【讨论】:

以上是关于laravel 过滤器返回所有记录的主要内容,如果未能解决你的问题,请参考以下文章

laravel:如何从数据库端过滤记录

根据子表中的“当前”值过滤 belongsToMany 记录

过滤咖啡脚本中的记录数组以返回年龄> 50的所有记录

如何根据使用 Laravel 连接的用户过滤记录?

Laravel(三)分页排序和过滤

下一页单击分页后Laravel过滤器重置