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

Laravel查询模型时如何将数组传入where条件获取对应数据

问题原因

  • 核心问题是传入whereIn的$categorypro数组存在键冲突元素丢失:你给出的数组示例中,下标1同时对应值8和5,PHP数组的键具有唯一性,后续赋值的5会覆盖之前的8,最终实际传入查询的数组只有[4,5],分类ID为8的数据自然无法返回。
  • 次要问题是参数未做校验过滤:如果前端传递的categorypro是逗号拼接的字符串而非数组格式,$request->get('categorypro')会返回字符串,直接传入whereIn会导致查询逻辑异常,同时也存在SQL注入风险。
  • 额外风险:当前代码未对空数组场景做判断,如果$categorypro是空数组,whereIn会生成category_id in ()的非法SQL,直接抛出异常。

修复方案

第一步:修复参数传递逻辑

前端提交多值参数时,参数名需要加[]后缀,例如AJAX提交时参数写为categorypro[]: [4,8,5],才能保证PHP正常接收为完整数组,不会出现值覆盖的情况。

第二步:优化后端代码健壮性

function filter_each_video(Request $request){
    if($request->ajax()){
        // filled方法直接判断参数存在且不为空,替代原有has+非空判断更简洁
        if($request->filled('categorypro')){
            // 强制转为数组,过滤无效值、去重、转整数避免注入风险
            $categorypro = (array)$request->get('categorypro');
            $categoryIds = array_unique(array_filter(array_map('intval', $categorypro)));
            
            // 空数组判断,避免生成非法SQL
            if(!empty($categoryIds)){
                $item = Item::whereIn('category_id', $categoryIds)->get();
            } else {
                // 可自定义空数组场景的返回逻辑,示例为返回空集合
                $item = collect();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:54:01