首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel的分页到底是如何工作的?

问Laravel的分页到底是如何工作的?
EN

Stack Overflow用户
提问于 2019-08-02 18:39:47
回答 2查看 2.3K关注 0票数 0

我需要澄清Laravel的分页器在后台是如何工作的:假设我有一个有1000行的表,如果我理解正确的话,我使用$results = Model::paginate(100);,Eloquent将返回一个包含表中所有行(1000行)的集合,将其分成更小的100行集合,并将分页按钮的数据附加到这些集合上。现在,$results包含Page 1集合和按钮的分页数据。我的问题是:当我按下Page 2按钮时,后台会发生什么?Eloquent是否会再次查询数据库,再次检索整个1000行集合,对其进行切片并返回Page 2集合,或者它会对我之前的请求已经检索回来的集合起作用吗?或者,Eloquent的::paginate(100)是否使用限制查询数据库?像select * from table limit 100一样

EN

回答 2

Stack Overflow用户

发布于 2019-08-02 18:58:27

您可以使用Laravel望远镜来了解Laravel是如何工作的。在queries选项卡上,您将看到在发出请求时执行了哪些查询(如果未启用缓存)。

​

票数 1
EN

Stack Overflow用户

发布于 2019-08-03 05:41:04

可能包含所有信息的页面:https://laravel.com/docs/5.8/pagination

看看Illuminate\Database\Eloquent\Builder类(Laravel 5.8):

代码语言:javascript
复制
/**
     * Paginate the given query.
     *
     * @param  int  $perPage
     * @param  array  $columns
     * @param  string  $pageName
     * @param  int|null  $page
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
     *
     * @throws \InvalidArgumentException
     */
    public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)

您可以派生出:

分页方法是一个查询构建器函数,因此它作用于从文档中分页的mysql,“

  • 方法自动负责根据用户正在查看的当前页面设置适当的限制和偏移量”。这意味着page url参数(即,example.com?page=2)将被自动考虑并显示正确的页面。您可以使用$pageName修改此属性的名称)。Page默认为1.
  • 当你执行paginate(100),页面是2,时,查询将使用类似于LIMIT 100 OFFSET 100的东西来获取记录101-200。是的,它只检索需要查看的记录,因此效率很高。

作为附注:有一些解决方案可以对Collection实例进行分页,效率较低,因为您每次查询100条记录,并将100个项的集合划分为10个一页(因此没有使用90个项)。但是,这通常是不需要的,除非您必须手动编写集合(比如包含不同类型的雄辩模型的集合)。

另外,作为附注,您可能希望使用

https://packagist.org/packages/barryvdh/laravel-debugbar

composer require barryvdh/laravel-debugbar

它允许您轻松查看查询和许多其他应用程序内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57324838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档