从laravel模型中检索记录

时间:2016-11-08 14:39:01

标签: php laravel laravel-5

我有一个Laravel应用程序,我有一个带有780950寄存器的数据库表,因此,当我用eloquent检索它时​​需要很长时间,然后给出超出时间的错误。有没有办法检索例如前30条记录?我试过这个:

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

但是是一样的。那么,我只是说:

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

它有效,但它不是我想要的,因为我想分页并显示所有记录。所以,我知道它有很多记录,但如果我可以检索前30个,然后用ajax检索另外30个。那么在Laravel 5.3中实现这一目标的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用skip()take()

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() }}