2016-11-08 28 views
0

檢索記錄,我有一個Laravel應用程序,我有780950個登記數據庫表,所以,當我取回這與雄辯它需要很長很長一段時間,然後給出了超時錯誤。有沒有辦法檢索例如前30條記錄?我試過這個:從laravel模式

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

但是是一樣的。那麼,我只是把:

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

和它的作品,但它不是我想要的,因爲我想和分頁顯示的所有記錄。所以,我知道這是很多記錄,但如果我可以檢索前30個,然後用ajax檢索另外30個。那麼在Laravel 5.3中實現這一點的最好和最優雅的方法是什麼?

+1

[documentation](https://laravel.com/docs/5.3/pagination)正確地解釋了您要查找的內容。 –

回答

2

當你做Model::all()->take(30)->get();,你實際上是在說「檢索所有的數據庫記錄,然後給我第30個「。所以你就可以裝載80萬條記錄只是爲了搶第30

你真正想做的事,如果你想分頁,是什麼:

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

paginate()方法會自動判斷當前頁面來自URL中的查詢字符串,並將您可以傳遞給視圖的對象返回給分頁。

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

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

它完美的工作!謝謝 –

2

您可以使用skip()take()

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

另一種方法是用大塊得到chunk()數據:

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