2016-11-08 4 views
0

Ich habe eine Laravel-Anwendung, ich habe eine Datenbanktabelle mit 780950-Registern, also, wenn ich dies mit eloquent abrufen dauert es eine lange lange Zeit und dann gibt Zeit überschritten Fehler. Gibt es eine Möglichkeit, beispielsweise die ersten 30 Datensätze abzurufen? Ich versuchte mit diesem:Abrufen von Datensätzen aus Laravel-Modell

mymodel::all()->take(30)->get(); 

ist aber das selbe. Also dann, ich gerade:

mymodel::where('id','<','30')->get(); 

Und es funktioniert, aber es ist nicht das, was ich will, weil ich Paginieren will und alle Datensätze angezeigt werden soll. Also, ich weiß, dass es viele Aufzeichnungen gibt, aber wenn ich die ersten 30 abrufen kann und dann mit ajax noch 30 weitere abrufen kann. Was ist der beste und elegantere Weg, dies in Laravel 5.3 zu erreichen?

+1

Die [Dokumentation] (https://laravel.com/docs/5.3/pagination) erklärt genau das, wonach Sie suchen. –

Antwort

2

Wenn Sie Model::all()->take(30)->get(); tun, sind Sie eigentlich sagen „alle das Abrufen Datenbank-Datensätze, dann gib mir die ersten 30 ". So finden Sie alle 800.000 Datensätze werden Laden nur greifen die ersten 30

Was Sie wirklich wollen, zu tun ist, wenn Sie Paginierung wollen, ist:

$models = Model::paginate($perPage); 

Die paginate() Methode wird automatisch die aktuelle Seite bestimmen aus den Abfragezeichenfolgen in der URL und geben Ihnen ein Objekt zurück, das Sie an Ihre Paginierungssichten übergeben können.

<div class="container"> 
    @foreach ($models as $model) 
     {{ $model->name }} 
    @endforeach 
</div> 

{{ $models->links() }} 
+0

es funktioniert perfekt !! danke –

2

können Sie verwenden skip() und take():

mymodel::skip(0)->take(30)->get(); 

Eine weitere Möglichkeit, Daten mit chunk() von Brocken bekommen:

mymodel::chunk(200, function ($flights) { 
    foreach ($flights as $flight) { 
     // 
    } 
}); 
Verwandte Themen