如何使用Pothos Prisma插件实现游标分页?
使用Pothos Prisma插件实现游标分页
完全可以用Pothos Prisma插件实现游标分页,以下是结合你的模型给出的具体实现步骤:
1. 定义分页返回结构
首先创建承载分页数据的Connection类型,这是GraphQL游标分页的标准结构:
// 定义Factory的Connection类型,包含edges和pageInfo builder.connectionObject("FactoryConnection", { nodeType: "factory" });
2. 修改User模型的factories字段
将原来的普通关联字段替换为prismaConnection,配置游标分页逻辑:
builder.prismaObject("user", { fields: (t) => ({ id: t.exposeID("id"), factories: t.prismaConnection({ type: "factory", cursor: "id", // 指定用factory的id作为游标字段(也可选用createdAt等有序字段) resolve: (query, user, args) => { // 利用Pothos传入的query参数自动处理分页条件,直接关联查询factories return prisma.user.findUnique({ where: { id: user.id } }).factories({ ...query }); }, }), }), });
3. 游标分页查询示例
你可以这样发起查询获取分页数据:
query GetUserWithPaginatedFactories($userId: ID!, $after: String) { user(id: $userId) { id factories(after: $after, first: 10) { edges { node { # 替换为你的factory模型实际字段 id # 比如name、address等 } cursor # 当前节点的游标,用于下一页查询 } pageInfo { hasNextPage # 是否还有下一页数据 endCursor # 当前页最后一个节点的游标 } } } }
关键说明
prismaConnection是Pothos Prisma插件专门为分页提供的方法,会自动处理游标解析、分页条件拼接- 选择游标字段时,优先用唯一且有顺序的字段(比如自增ID、时间戳),确保分页逻辑稳定
- 无需手动处理游标编码/解码,插件会自动完成这部分工作
内容的提问来源于stack exchange,提问作者NicoleZ
相关产品推荐
相关产品推荐

