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