流明 API 花式过滤

Lumen API fancy filtering

如何使用查询生成器在 Lumen API 中进行精美的过滤?例如,我想像这样过滤我的产品:http://localhost:8000/products?product_group=network

这是我的控制器:

 public function index(){
        $tlt_product_groups =  DB::table('tlt_products')->groupBy('product_group')->get()->toArray();

        $tlt_products = DB::table('tlt_products')->get()->groupBy('product_group')->toArray();
        return response()->json([
            'categories'=> $tlt_product_groups,
            'products' =>$tlt_products

        ]);
    }

这是我的路线:

$router->get('products','ProductController@index');

在查询没有调用get()之前,它仍然是一个查询对象,可以进一步转换。您不必将整个查询写成一个片段。因此,您应该能够执行以下操作:

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

    if ($request->has('product_group')) {
        $query = $query->where('product_group', $request->get('product_group'));
    }

    $products = $query->get();

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

如果你想扩展你的过滤,你也可以允许在多个列上进行过滤,而不必为每个新列再次编写代码:

public function index(\Illuminate\Http\Request $request) {
    $filterColumns = ['product_group', 'price', 'manufaturer'];

    $query = DB::table('tlt_products');

    foreach ($filterColumns as $column) {
        if ($request->has($column)) {
            $query = $query->where('product_group', $request->get($column));
        }
    }

    $products = $query->get();

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