2016-04-03 5 views
0

In Laravel ich dies in einem Ressourcen-Controller schreiben zu reagieren Anfragen zu bekommen (wir die Ressource sagen Produkte):Laravel Query-String mit weniger/mehr als etc

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); 
} 

Dies funktioniert gut für Anforderungen mit "=", wie im Beispiel. Aber was ist, wenn wir nicht nach Preis = 500 suchen wollen, aber vielleicht Preis < = 500 oder Preis> 500. Was wäre der beste Laravel (und RESTful) Ansatz dafür?

Hinweis: Laravel 5.2

Antwort

1

Sie können dies tun.

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); 
} 

Oder:

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); 
} 

bearbeiten nach @ Joel Hinz Kommentar:

Wenn Sie auch die Betreiber der Abfrage übergeben wollen, können Sie einen neuen Parameter hinzufügen zur URL, zum Beispiel

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

Dann die Nummer im Controller wechseln.

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

Ich denke OP möchte den Operator von der Querystring auch bekommen. –

+0

Ja, vielleicht hast du recht –

+0

Nun ja, die Sache ist, dass ich das natürlich tun könnte, und zusätzliche Parameter wie 'maxprice' und 'minprice' usw. hätte. Aber es sollte eine bessere Lösung geben, oder? Ich meine, das ist, was du die ganze Zeit tust - fordere eine Ressource und setze andere Parameter. Es scheint eine Menge Arbeit zu sein, die Parameter für max und min ständig anzupassen. Die Schönheit von $ request-> toArray() ist, dass ich die Parameter überhaupt nicht spezifizieren muss. – Myone