2016-04-03 48 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