2016-04-03 47 views
0

在laravel,我可以在一个资源控制器写这篇文章,以获得响应的请求(假设资源是产品):Laravel查询字符串少/大于等

public function index(Request $request) 
{ 
    // Handles requests such as ".../api/products?user_id=5&price=500" 
    $products = Product::where($request->toArray())->get(); 
    return response($products); 
} 

也能正常工作与要求“=”,例如在这个例子中。但是如果我们不想搜索价格= 500,但可能价格< = 500或价格> 500,那该怎么办?最好的Laravel(和RESTful)方法是什么?

注意:Laravel 5.2

回答

1

你可以这样做。

public function index(Request $request) 
{ 
    // Handles requests such as ".../api/products?user_id=5&price=500" 
    $products = Product::where('user_id', $request->user_id)->where('price', '<=', intval($request->price))->get(); 
    return response()->json($products); 
} 

或者:@Joel欣茨评论后

public function index(Request $request) 
{ 
    // Handles requests such as ".../api/products?user_id=5&price=500" 
    $products = Product::whereRaw("user_id=? and price<=?", [$request->user_id, $request->price])->get(); 
    return response()->json($products); 
} 

编辑:

如果您还想传递查询的操作符,你可以添加一个新的参数到网址,例如

/api/products?user_id=5&price=500&op=1 

然后切换控制器中的号码。

public function index(Request $request) 
{ 
    // Handles requests such as ".../api/products?user_id=5&price=500&op=1" 
    switch(intval($request->op)){ 
     case 1: 
     $op = "<="; 
     break; 

     case 2: 
     $op = ">"; 
     break; 

     //and so on 

     default: 
     return response()->json("Wrong parameters"); 
     break; 
    } 

    $products = Product::whereRaw("user_id = ? and price $op ?", [$request->user_id, $request->price])->get(); 
    return response()->json($products); 
} 
+0

我想OP也想从查询字符串中获取运算符。 –

+0

是的,也许你是对的 –

+0

嗯是的,事情是,我当然可以做到这一点,并有额外的参数,如'maxprice'和'minprice'等。但是,应该有一个更好的解决方案,对吧?我的意思是,这就是你一直在做的事 - 请求资源并设置不同的参数。似乎有很多工作需要随时为max和min定制参数。 $ request-> toArray()的美妙之处在于我甚至不需要指定参数。 – Myone