You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel多条件搜索仅填单个字段时返回全部记录如何修复?

问题原因
  • 控制器查询未做非空判断:当搜索字段为空时,LIKE "%%" 会匹配该字段所有值,加上orWhere的连接逻辑,只要有一个空字段的条件匹配所有,最终就会返回全部记录。
  • 前端下拉框默认选项无空值:未选择变速箱类型时,默认提交的value为文本"Transmission",会触发无效的匹配逻辑。
  • 表单属性笔误:原代码中form标签的type="get"应为method="get",否则提交方式会默认走POST请求。
修复代码

控制器代码修正

使用Laravel自带的when条件查询方法,仅当对应搜索参数不为空时,才把查询条件加到SQL语句中:

public function multiSearch(Request $request){
    $searchParams = $request->only(['search', 'search_1', 'search_2']);

    $cars = Car::query()
        // 价格参数不为空时才加查询条件
        ->when(!empty($searchParams['search']), function ($query) use ($searchParams) {
            return $query->where('price', 'LIKE', "%{$searchParams['search']}%");
        })
        // 车型年份参数不为空时才加查询条件
        ->when(!empty($searchParams['search_1']), function ($query) use ($searchParams) {
            // 如需多个条件同时满足,把下面的orWhere改成where即可
            return $query->orWhere('model', 'LIKE', "%{$searchParams['search_1']}%");
        })
        // 变速箱参数不为空时才加查询条件
        ->when(!empty($searchParams['search_2']) && $searchParams['search_2'] != 'Transmission', function ($query) use ($searchParams) {
            // 如需多个条件同时满足,把下面的orWhere改成where即可
            return $query->orWhere('transmission', 'LIKE', "%{$searchParams['search_2']}%");
        })
        ->get();

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

Blade模板代码修正

修正表单属性、下拉框默认值,同时增加搜索后内容回显,提升使用体验:

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

内容的提问来源于stack exchange,提问作者Salamah Salamah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:06:04