代码之家  ›  专栏  ›  技术社区  ›  Dominykas Česonis

Lumen API花式过滤

  •  0
  • Dominykas Česonis  · 技术社区  · 7 年前

    如何使用query builder在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');
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Namoshek    7 年前

    在你不打电话之前 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,
        ]);
    }
    
    推荐文章