2016-06-11 14 views
7

Ich habe ein Stück Code wie folgt aus:Method orderBy existiert nicht in Laravel Eloquent?

$products = Product::all() 

if ($search_value) { 
    $products = $products->where('name', 'LIKE', "%$search_value%"); 
} 

$products = $products->orderBy('created_at', 'desc')->skip(10)->take(10)->with('tags')->get(); 

ich folgende Fehlermeldung bekam:

BadMethodCallException in Macroable.php line 81: 
Method orderBy does not exist. 

ich orderBy Notwendigkeit erraten Product:: direkt zu folgen, aber ich kann $products = Product:: nicht speichern, kann ich ?

Irgendwelche Vorschläge? Vielen Dank.

Antwort

11

Sie versuchen, orderBy() Methode auf Eloquent-Sammlung zu verwenden. Versuchen Sie stattdessen, sortByDesc() zu verwenden.

Alternativ können Sie auch $products = Product::all(); in $products = new Product(); ändern. Dann funktioniert Ihr Code wie erwartet.

+0

Ist es möglich, ein 'Eloquent Modell '(dh'-Produkt mit) zu '$ Produkten', anstatt zu erhalten eine Sammlung zuzuordnen, die alle enthalten Reocrds? – Harrison

+0

Sicher. Sie können '$ products = Product :: all();' zu '$ products = new Product();' –

+1

Danke, das ist genau das, wonach ich suche. – Harrison

0

Sie erhalten zuerst all() Daten und dann versuchen zu sortieren, was falsch ist. Sie haben dieses Problem beheben, indem

$products = Product::all() 

entfernen und Ihren Code in so etwas wie diese

if ($search_value) { 
    $products = Product::where('name', 'LIKE', "%$search_value%"); 
} 
else { 
    $products = Product::orderBy('created_at', 'desc')->skip(10)->take(10)->with('tags')->get(); 
} 

Ändern Hoffnung, die Sie Idee, Ihren Code zu optimieren.

+0

Es ist meine aktuelle Arbeit um ... aber ich versuche zu vermeiden, die 'orderBy',' skip', etc zweimal zu tun – Harrison

0

Ihre Anfrage ist falsch.

Entfernen Sie alle von $products = Product::all() und setzen Sie dann get() am Ende Ihrer Abfrage.

7

verwenden nur den Code einer Zeile wird es

funktioniert
$product= Product::orderBy('created_at','desc')->get();