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

如何使用Query Builder在Lumen API中实现高级筛选?

在Lumen API中用Query Builder实现高级筛选功能

嘿,我来帮你搞定这个需求!要根据请求参数(比如product_group)筛选产品,我们可以通过动态构建查询来实现,既灵活又能保持代码简洁。下面是一步步的修改方案:

步骤1:注入Request实例

首先,要在控制器方法里注入Illuminate\Http\Request实例,这样才能轻松获取URL里的查询参数。

步骤2:动态构建筛选查询

不要直接调用get()返回所有数据,先初始化查询构建器实例,然后根据是否存在筛选参数来动态添加where条件——这样有参数时筛选,无参数时返回全部,非常灵活。

步骤3:保持原有返回结构

筛选完成后,再对结果进行分组,保持你原来返回的categories和products格式不变。

修改后的完整控制器代码

use Illuminate\Http\Request;

public function index(Request $request)
{
    // 初始化产品查询构建器
    $query = DB::table('tlt_products');

    // 检查是否存在product_group筛选参数,有则添加筛选条件
    if ($productGroup = $request->query('product_group')) {
        $query->where('product_group', $productGroup);
    }

    // 执行查询,获取筛选后的产品数据
    $filteredProducts = $query->get();

    // 处理分类:如果只需要筛选后的分组,用distinct+pluck;要全部分组就单独查一次无筛选的
    $tlt_product_groups = $query->distinct('product_group')->pluck('product_group')->toArray();

    // 对筛选后的产品按product_group分组
    $tlt_products = $filteredProducts->groupBy('product_group')->toArray();

    return response()->json([
        'categories' => $tlt_product_groups,
        'products' => $tlt_products
    ]);
}

代码细节解释

  • 参数获取:通过$request->query('product_group')拿到URL里的筛选参数,比如你示例中的network。
  • 动态筛选:用if判断参数是否存在,存在就追加where条件,避免无参数时做多余筛选。
  • 分类处理:用distinct('product_group')+pluck()获取唯一的产品分组,确保分类和筛选后的产品对应;如果需要保留全部分组,单独写一个不带筛选的查询即可。
  • 结构兼容:最后返回的categories和products格式和你原来的代码完全一致,前端无需调整。

扩展:支持更多筛选条件

如果以后要加其他筛选(比如价格范围、产品状态),只需要继续添加类似的判断就行:

// 示例:添加价格区间筛选
if ($minPrice = $request->query('min_price')) {
    $query->where('price', '>=', $minPrice);
}

if ($maxPrice = $request->query('max_price')) {
    $query->where('price', '<=', $maxPrice);
}

这样你的API就具备灵活的高级筛选能力啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:00