You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel/Lumen多值feature_id API过滤功能实现问题

解决多值Feature ID过滤问题

嘿,问题很明显啦!你当前的代码把请求里的feature_id参数(比如"1,2,3")直接塞进了数组里,所以whereIn实际上在查找feature_id等于整个字符串"1,2,3"的记录,而不是匹配1、2、3这些独立的ID,这就是多值时失效的原因。

下面是修复后的代码,我会一步步解释:

public function search2(\Illuminate\Http\Request $request) {
    $query = DB::table('tlt_product_features');

    if ($request->has('feature_id')) {
        // 第一步:把逗号分隔的字符串拆成单独ID的数组
        $featureIds = explode(',', $request->get('feature_id'));
        
        // 第二步:过滤掉空值(处理用户传入",1,2,"这类带多余逗号的情况)
        $featureIds = array_filter($featureIds);
        
        // 第三步:确保数组不为空时再应用whereIn(避免空数组导致的查询异常)
        if (!empty($featureIds)) {
            // 可选:把所有ID转成整数,确保类型匹配且更安全
            $featureIds = array_map('intval', $featureIds);
            $query = $query->whereIn('feature_id', $featureIds);
        }
    }

    $products = $query->get();
    // ... 你的后续逻辑
}

额外优化建议

  • 可以添加请求验证,确保参数格式合法:
    $request->validate([
        'feature_id' => 'nullable|string',
    ]);
    
  • 如果想更严谨,还可以验证每个ID都是正整数:
    $request->validate([
        'feature_id' => 'nullable|regex:/^(\d+,)*\d+$/', // 匹配逗号分隔的数字格式
    ]);
    

这样修改后,无论是传入单个ID(?feature_id=1)还是多个ID(?feature_id=1,2,3),查询都会正常工作啦!

内容的提问来源于stack exchange,提问作者Dominykas Česonis

火山引擎 最新活动