如何解决方差分析(嵌套列表)中的子选择/关系

时间:2019-06-05 16:19:21

标签: graphql prisma prisma-graphql

让我们举个棱镜的github回购示例:

我们有一个用户,该用户可以有多个帖子,一个帖子可以有多个链接。

我的目标是检索所有帖子和所有链接。 这意味着,我的回复是列表(帖子)中的列表(链接)。

我想将获得的值映射为两个嵌套列表。

datamodel.prisma

type User {
  id: ID! @id
  email: String! @unique
  name: String
  posts: [Post]!
}

type Post {
  id: ID! @id
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt
  published: Boolean! @default(value: false)
  title: String!
  content: String
  author: User!
  links: [Link]!
}

type Link {
  id: ID! @id
  url: String
  title: String
  post: Post!
}

schema.graphql

type Query {
  ...
}

type Mutation {
  ...
}

type Link {
  id: ID!
  url: String
  title: String
  post: Post!
}

type Post {
  id: ID!
  createdAt: DateTime!
  updatedAt: DateTime!
  published: Boolean!
  title: String!
  content: String
  author: User!
}

type User {
  id: ID!
  email: String!
  name: String
  posts: [Post]!
}

我要查询用户的所有帖子,以及响应中每个帖子的所有链接。

我将如何查询此请求?

user {
  id
  posts {
    id
    links {
      id
    }
  }
}

上面的代码截取器不起作用。

编辑 我要使用以下内容:

User: {
  listPosts: (parent, args, context, info) {
    return context.prisma.posts().links()
  }
}

因此,在我的响应(通过react-apollo查询组件在前端中的数据)中,我想映射帖子以及每个帖子中的链接。

但帖子中的links属性为空。

还有另一种方法可以实现吗?!

1 个答案:

答案 0 :(得分:1)

根据文档:

  

Prisma客户端具有流利的API,可以查询数据库中的关系。意味着您可以简单地链接方法调用以导航返回记录的关系属性。 仅当检索单个记录而不是列表时才有可能。这意味着您无法查询列表中返回的记录的关系字段。

为了解决该限制,可以使用$fragment方法:

const fragment = `
fragment UserWithPostsAndLinks on User {
  id
  email
  name
  posts {
    id
    title
    content
    links {
      id
      url
      title
    }
  }
}
`

const userWithPostsAndLinks = await prisma.user({ id: args.id }).$fragment(fragment)