从laravel模型中检索记录


Retrieve records from laravel model

我有一个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) {
        //
    }
});