Laravel与GraphQL有个约会(五)-GraphQL中处理分页

场景:

    开发WEB程序时,分页功能是必不可少的一项功能。Laravel框架中提供了非常便捷的分页处理方法。那么在GraphQL API中是如何实现分页的呢?

下面是使用分页处理GraphQL数据后的情况:

Clipboard Image.png

cursor中的参数意思分别是:

    perPage:一共有多少页

    total:一共有多少条数据

    currentPage:代表当前的页码

    hasPages:可以简单理解为分页后的数据是否超过一页。

   使用方式很简单:

Clipboard Image.png

源码分析:

    folklore/graphql分页是基于Laravel的LengthAwarePaginator来实现的,下面是读源代码的流程:

首先进入GraphQL::pagination()方法,位置在Folklore\GraphQL\GraphQL:

Clipboard Image.png

进入PaginationCursorType类中,位置在Folklore\GraphQL\Support\PaginationCursorType

Clipboard Image.png

我们可以看见Laravel中的LengthAwarePaginator,由此可以看出GraphQL中的分页是依赖于Laravel中的分页机制。

再来看到PaginationType类,该类是分页后的数据类型。该类位于Folklore\GraphQL\Support\PaginationType:

Clipboard Image.png

注意我们的数据被放在了items中。这个是他的默认行为。因为Laravel中的分页参数(下图标红框的部分,好奇的话可以打印看看)会根据参数名会映射到GraphQL的Schema上:

Clipboard Image.png

我们可能会觉得在原有的数据结构上又嵌套了一层items,对于已经快成型的系统,如果在引入这种方式,将会严重破坏代码。如果觉得看起来很不舒服。可以修改GraphQL分页机制,像之前我们自定义异常一样,在这里不展开了。

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容