2017-04-14 5 views
0

Ich lade eine db-Tabelle mit Yajra-Databases in Laravel 5.2. Meine Tabelle enthält Datensätze über 50 KB, so dass die Methode get() viel Arbeitsspeicher belegt. Jedoch Ich verwende die paginate() Methode, ein Fehler auftritt:Warum Paginierung funktioniert nicht mit Yajra Datentabellen in Laravel 5.2

BadMethodCallException Macroable.php in Leitung 74: Method getQuery nicht existiert.

-Code ist:

$required_orders = Order::where('order_status','Delivered')->paginate(); 
return Datatables::of($required_orders)->make(true); 

Antwort

0

Datentabellen erfordert in der Regel ein Objekt Querybuilder, wenn Sie rufen paginate() Sie sind grundsätzlich mit einer Sammlung zu arbeiten. Sie könnten Datatables::collection() verwenden, aber das wollen Sie nicht, denn Sie müssen alles aus der Datenbank holen, was Sie nicht tun wollen.

Mit Yajra sollten Sie die Ajax-Aufrufe zu paginieren, wird es die Seitenumbruch (nicht Laravel) behandeln, daher erfordert der QueryBuilder zählt usw. um paginierte Daten und Metadaten zurückzugeben.

Die beste Option wäre eine separate Datentabelle (api) Route zu erstellen, und schauen Sie sich datatables.net server side processing

Edit:

Beispiel für Server-Seite nach der Verarbeitung Sie etwas tun wollen würde:

$(document).ready(function() { 
    $('#yourDatatableId').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     "ajax": "/api/datatables/order" 
    }); 
}); 

Und lassen Sie die Strecke Rückkehr etwas wie:

$builder = Order::where('order_status', 'Delivered'); 

return Datatables::of($builder)->make(true); 

Für den HTML-Teil, überprüfen Sie das Beispiel, im Grunde können Sie die Spalten in der Javascript definieren und es wird Ihre Zeilen aus den zurückgegebenen Daten ausfüllen. Auch check , dort sehen Sie start und length, die für die Seitennummerierung von der Frontend-Databibliothek verwendet werden.

+0

Hallo Robert! Danke für deine Antwort. Können Sie mir bitte eine Methode vorschlagen, um 100K-Datensätze effizient abzurufen und aufzulisten, ohne zu viel Speicher zu verbrauchen? –

+0

@AliHamza siehe aktualisierte Antwort – Robert

+0

! Ich habe versucht, oben genannten Verfahren, aber Problem ist, dass, wenn ich diesen Befehl ausführen "$ Builder = Auftrag :: wo ('Auftrag_Status', 'geliefert');" , es verbraucht viel Speicher, da es über 50K Datensätze gibt. Wie kann ich dieses Problem in Laravel 5.2 überwinden? –

Verwandte Themen