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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:47:28