让我们举个棱镜的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属性为空。
还有另一种方法可以实现吗?!
答案 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)