2017-11-03 41 views
1

Ich versuche, einen Filter in Laravel zu machen. Der folgende Filter arbeitetSo filtern Laravel Sammlung

$posts= Post::where('category',$request->category)->orderBy('id','desc')->paginate(10); 

Aber wenn ich versuche, so etwas wie diese

public function index(Request $request) 
{ 
    $posts= Post::where('category',$request->category)->get(); 
    $posts->latest()->paginate(10); 
    dd($posts); 

zu tun, arbeiten Sie nicht. Kann jemand erklären, warum das ist und mir den Code zur Verfügung stellen, der funktioniert? Mein Projekt hat mehrere Filter.

Fehler enter image description here

+0

was Laravel sich Gedanken zu haben Version ist das? und Was bedeutet "es funktioniert nicht", d. h. welche Fehler haben Sie gesehen? –

+0

das ist Laravel 5.5 und ich meine niedriger Code funktioniert nicht – Santosraj

+0

Welche Fehler haben Sie bekommen? –

Antwort

0

Da $posts = Post::all(); bereits eine Abfrage ausführen.

Post::where('category',$request->category)->latest()->paginate(10)->get(); 

wäre was Sie wollen.

Eine Anmerkung: latest erfordert die created_at Spalte

0

Sie

$posts = Post::where('category',$request->category)->latest()->paginate(10); 

die GET-Anforderung ist nicht notwendig, da die Paginieren die Abfrage ausführen wird gehen sollte.

+0

was ist, wenn $ request-> category == null – Santosraj

+0

Was möchten Sie tun, wenn die Kategorie null ist? – pseudoanime

0

Die erste macht die Abfrage von Paginierung holen dh 10 Datensätze pro aufgebauten Seite

Für die zweiten, auf der Beobachtung, haben Sie wahrscheinlich mindestens 2 Fehler aufgetreten: Die ersten, auf der Linie, verwendete die get Methode, weil diese Methode mindestens einen Parameter benötigt.

Type error: Too few arguments to function Illuminate\Support\Collection::get() 

Die andere seit seiner eine Sammlung, und da gibt es nichts wie paginate oder latest Methode zur Sammlung daher andere Fehler wirft. Sie sollten Collection's Available methods überprüfen, um einen Blick auf die Methoden zu werfen, die beim Sammeln erlaubt sind.

Eine der besten Lösungen ist einfach das Ergebnis zu bestellen, wenn die Abfrage machen:

Blog::where('category',$request->category) 
    ->orderBy('created_at', 'desc') //you may use also 'updated_at' also depends on your need 
    ->paginate(10); 

Auf diese Weise haben Sie die neueste die Paginierung erste int kommen und auch nicht über paginating a collection