我有一个Laravel应用程序,我有一个780950寄存器的数据库表,所以,当我用eloquent检索这个表时,它需要很长很长的时间,然后给出超时错误。是否有一种方法来检索例如前30条记录?我试过了:
mymodel::all()->take(30)->get();
But是一样的。然后,我输入:
mymodel::where('id','<','30')->get();
它可以工作,但这不是我想要的,因为我想要分页并显示所有记录。我知道有很多记录,但如果我能检索前30条然后用ajax检索另外30条。那么在Laravel 5.3中实现这一目标的最佳和更优雅的方法是什么呢?
当你做Model::all()->take(30)->get();
时,你实际上是在说"检索所有数据库记录,然后给我前30条"。所以你将加载所有800,000条记录,只获取前30条。
如果你想分页,你真正想做的是:
$models = Model::paginate($perPage);
paginate()
方法将自动从URL中的查询字符串中确定当前页面,并返回一个对象,您可以将该对象传递给视图进行分页。
<div class="container">
@foreach ($models as $model)
{{ $model->name }}
@endforeach
</div>
{{ $models->links() }}
您可以使用skip()
和take()
:
mymodel::skip(0)->take(30)->get();
另一种方法是通过chunk()
:
mymodel::chunk(200, function ($flights) {
foreach ($flights as $flight) {
//
}
});