如何解决 prisma 中的子选择/关系(嵌套列表)
How to resolve subselections / relations in prisma (nested lists)
让我们从 prisma 的 github 回购中举个例子:
我们有一个用户,这个用户可以有多个post,一个post可以有多个链接。
我的目标是检索所有 post 和所有链接。
这意味着,我的回复是列表(posts)中的列表(链接)。
我想将返回的值映射为两个嵌套列表。
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]!
}
我想查询一个用户的所有post,以及响应中每个post的所有链接。
我该如何查询这个请求?
user {
id
posts {
id
links {
id
}
}
}
上面的代码片段不会工作。
编辑
我想使用以下内容:
User: {
listPosts: (parent, args, context, info) {
return context.prisma.posts().links()
}
}
所以在我的回复中(前端的数据通过 react-apollo 查询组件),我想映射 posts 和每个 post.
中的链接
但是 posts 中的链接属性为空。
还有其他方法可以实现吗?!
根据文档:
Prisma client has a fluent API to query relations in your database. Meaning you can simply chain your method calls to navigate the relation properties of the returned records. This is only possible when retrieving single records, not for lists. Meaning you can not query relation fields of records that are returned in a list.
为了绕过该限制,您可以使用 $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)
让我们从 prisma 的 github 回购中举个例子:
我们有一个用户,这个用户可以有多个post,一个post可以有多个链接。
我的目标是检索所有 post 和所有链接。 这意味着,我的回复是列表(posts)中的列表(链接)。
我想将返回的值映射为两个嵌套列表。
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]!
}
我想查询一个用户的所有post,以及响应中每个post的所有链接。
我该如何查询这个请求?
user {
id
posts {
id
links {
id
}
}
}
上面的代码片段不会工作。
编辑 我想使用以下内容:
User: {
listPosts: (parent, args, context, info) {
return context.prisma.posts().links()
}
}
所以在我的回复中(前端的数据通过 react-apollo 查询组件),我想映射 posts 和每个 post.
中的链接但是 posts 中的链接属性为空。
还有其他方法可以实现吗?!
根据文档:
Prisma client has a fluent API to query relations in your database. Meaning you can simply chain your method calls to navigate the relation properties of the returned records. This is only possible when retrieving single records, not for lists. Meaning you can not query relation fields of records that are returned in a list.
为了绕过该限制,您可以使用 $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)