我正在使用Express
和Prisma
构建REST API。我有一个Prisma
数据模型,如下所示
type User {
id: ID! @id
email: String! @unique
name: String
posts: [Post!]! @relation(link: INLINE)
}
type Post {
id: ID! @id
createdAt: DateTime! @createdAt
updatedAt: DateTime! @updatedAt
published: Boolean! @default(value: false)
title: String!
content: String
author: User!
}
现在,如果我这样查询数据
const posts = await prisma.users()
仅返回帖子。
[
{
"id": "cjo5vwaaq6e7p0a42qpoz3aj3",
"email": "ada@prisma.io",
"name": "Ada"
}
]
但是我也想在用户Object中获取该用户的所有帖子。
[
{
"id": "cjo5vwaaq6e7p0a42qpoz3aj3",
"email": "ada@prisma.io",
"name": "Ada",
"posts": [
{
"title": "This is title"
}
]
}
]
我该怎么做?我是Prisma
的新手。我知道我不必使用Prisma
来构建REST API,但是我必须这样做。
但是我找不到与REST API一起使用的Prisma的任何良好文档。
答案 0 :(得分:0)
要查询关系数据,您需要使用片段或pyramida fluent API。正如您已经发现的那样,prisma客户端仅返回标量字段,没有关系。您的情况下的帖子是一种关系。
每当使用Prisma客户端查询数据库记录时,所有 获取该记录的标量字段。无论是否 查询单个记录或记录列表。
请参阅:https://www.prisma.io/docs/prisma-client/basic-data-access/reading-data-JAVASCRIPT-rsc2
对于单个查询(例如获得一个用户),您可以使用prisma fluent API。因此,要获取特定用户的帖子,您可以编写:
const posts = await prisma.user({ where: { email: 'test@test.de' }})).posts()
请参阅:https://www.prisma.io/docs/prisma-client/basic-data-access/reading-data-JAVASCRIPT-rsc2/#relations
这仅适用于单个记录,不适用于列表。要检索所有记录的数据,您需要使用片段。例如。要获得与用户数据一起的关系发布数据,您可以编写如下内容:
const fragment = `
fragment UserWithPosts on User {
id
name
email
posts {
id
title
}
}
`
const userWithPosts = await prisma.users().$fragment(fragment)
希望能有所帮助。