Laravel多选品牌复选框过滤失效问题求助
产品过滤系统多选品牌筛选问题解决
我正在使用Laravel PHP框架开发产品过滤系统,需根据复选框选中的品牌筛选产品。单选品牌(如Intel)时可正常返回对应3款产品,但多选品牌时仅能获取第一个选中项的结果。
视图代码
<div id="filters-status" class="mt-3 collapse" aria-labelledby="filters-status-heading" style=""> <ul class="space-y-6 mb-8"> @foreach ($prods->unique('marque') as $itme) <li> <label class="flex items-center cursor-pointer w-full"> <input type="checkbox" id="terms" name="marque[]" value="{{ $itme->marque }}" class="h-5 w-5 mr-2 rounded border-jacarta-200 text-accent checked:bg-accent focus:ring-accent/20 focus:ring-offset-0 dark:border-jacarta-500 dark:bg-jacarta-600"> <span class="dark:text-white"> {{ $itme->marque }} </span> </label> </li> @endforeach </ul> <input class="cursor-pointer rounded-full bg-accent-lighter w-full py-3 px-8 text-center font-semibold text-white transition-all hover:bg-accent-dark" type="submit" value="Soumettre"> </div>
控制器代码
public function fliter(Request $request) { $brand = ($request->marque); $disponible = ($request->disponibilite); $query = DB::table('produits'); if($brand){ $query->where('marque', $brand); } if($disponible) { $query->where('disponibilite', $disponible); } $filtterProduits = $query->get(); return response()->json($filtterProduits); }
问题原因及解决方法
问题根源
多选品牌时,前端通过marque[]提交的是数组格式参数,但原控制器用where('marque', $brand)筛选。Laravel处理此情况时会自动取数组第一个元素作为匹配值,导致仅返回首个选中品牌的产品。
解决方案
将品牌筛选的where方法替换为whereIn,该方法专门用于匹配字段值在指定数组范围内的记录,同时兼容单选(数组仅含单个元素)和多选场景。
修改后的控制器代码:
public function fliter(Request $request) { $brand = $request->marque; $disponible = $request->disponibilite; $query = DB::table('produits'); if ($brand) { // 使用whereIn匹配数组中的多个品牌 $query->whereIn('marque', $brand); } if ($disponible) { $query->where('disponibilite', $disponible); } $filtterProduits = $query->get(); return response()->json($filtterProduits); }
内容的提问来源于stack exchange,提问作者MOHAMED KESSOUM
相关产品推荐
相关产品推荐

