【问题标题】:Prisma cursor based pagination基于 Prisma 光标的分页
【发布时间】:2018-11-30 09:20:24
【问题描述】:

刚刚完成了关于构建基于 Prisma 的 graphql 后端的优秀教程。他们在https://www.howtographql.com/graphql-js/8-filtering-pagination-and-sorting/ 解释了如何实现首偏移分页。

现在我想知道,如何实现基于光标的分页?

这是我的类型(它们与教程中的相同):

type User
    implements Node {
    id: ID!
    name: String!
    email: String!
    password: String!
    links(...): [Link!]
    votes(...): [Vote!]
}

type Link
    implements Node {
    id: ID!
    createdAt: DateTime!
    description: String!
    url: String!
    postedBy(...): User
    votes(...): [Vote!]
}

在操场上,我试图查询用户信息以及用户创建的链接:

{
  user(where: {id:"cjimzqrshb3nf0c29z1p7km0j"}) {
    email
    links {
      id
      url
      description
    }
  }
}

它会将用户创建的所有链接返回给我。我怎样才能对它们进行分页? Links 对象没有分页信息,而 linksConnection 不适合用户对象。

【问题讨论】:

    标签: graphql prisma


    【解决方案1】:

    您可以查询与用户相关的链接连接,从而访问游标:

    {
      linksConnection(where:{user:{id:"cjimzqrshb3nf0c29z1p7km0j"}}){
         pageInfo{
           endCursor
           startCursor
         }
         edges{
           cursor
         }
      }
    }
    

    【讨论】:

    • 这是否意味着我必须向后端发送两个请求?一个用于用户信息,第二个用于用户链接?我认为 graphql 有助于避免这种确切的情况。
    【解决方案2】:

    您可以像这样使用 Prisma 实现基于光标的分页:

    {
      users{
        links(first: 10, after:"some-id") {
          description
        }
      }
    }
    

    这是可能的,因为 id 和 cursor 相同。

    您也可以像这样使用基于偏移的分页:

    {
      users{
        links(first: 10, skip: 30) {
          description
        }
      }
    }
    

    【讨论】:

    • 我想知道,如何与 Prisma 进行用户连接?您的示例可以工作,但缺少连接类型提供的信息(pageInfo 等)
    • 使用usersConnection 而不是users,这会暴露中继式连接。
    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2023-03-12
    • 2015-07-06
    • 2021-03-16
    相关资源
    最近更新 更多