如何在使用 Prisma 构建的 REST API 中查询嵌套数据
How to query nested data in a REST API built with Prisma
我正在使用 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()
它 returns 我只有帖子。
[
{
"id": "cjo5vwaaq6e7p0a42qpoz3aj3",
"email": "ada@prisma.io",
"name": "Ada"
}
]
但我还想获取用户对象中某个用户的所有帖子。
[
{
"id": "cjo5vwaaq6e7p0a42qpoz3aj3",
"email": "ada@prisma.io",
"name": "Ada",
"posts": [
{
"title": "This is title"
}
]
}
]
我该怎么做?我是 Prisma
的新人。我知道我不必使用 Prisma
来构建 REST API 但我必须这样做。
但是我没有找到任何与 REST API 一起使用的 Prisma 的好文档。
要查询关系数据,您需要使用 fragments 或 prisma fluent API。正如您已经发现的,prisma 客户端只有 returns 标量场,没有关系。你的帖子是有关系的。
Whenever a database record is queried using the Prisma client, all
scalar fields of that record are fetched. This is true no matter if a
single record or a list of records is queried.
参见:https://www.prisma.io/docs/prisma-client/basic-data-access/reading-data-JAVASCRIPT-rsc2
对于单个查询(例如获取单个用户),您可以使用 prisma fluent API。因此,在您的情况下,要让某个用户获得 posts,您可以这样写:
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
这仅适用于单个记录,不适用于列表。要检索所有记录的数据,您需要使用片段。例如。要获得关系 post 数据和用户数据,您可以这样写:
const fragment = `
fragment UserWithPosts on User {
id
name
email
posts {
id
title
}
}
`
const userWithPosts = await prisma.users().$fragment(fragment)
希望对您有所帮助。
我正在使用 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()
它 returns 我只有帖子。
[
{
"id": "cjo5vwaaq6e7p0a42qpoz3aj3",
"email": "ada@prisma.io",
"name": "Ada"
}
]
但我还想获取用户对象中某个用户的所有帖子。
[
{
"id": "cjo5vwaaq6e7p0a42qpoz3aj3",
"email": "ada@prisma.io",
"name": "Ada",
"posts": [
{
"title": "This is title"
}
]
}
]
我该怎么做?我是 Prisma
的新人。我知道我不必使用 Prisma
来构建 REST API 但我必须这样做。
但是我没有找到任何与 REST API 一起使用的 Prisma 的好文档。
要查询关系数据,您需要使用 fragments 或 prisma fluent API。正如您已经发现的,prisma 客户端只有 returns 标量场,没有关系。你的帖子是有关系的。
Whenever a database record is queried using the Prisma client, all scalar fields of that record are fetched. This is true no matter if a single record or a list of records is queried.
参见:https://www.prisma.io/docs/prisma-client/basic-data-access/reading-data-JAVASCRIPT-rsc2
对于单个查询(例如获取单个用户),您可以使用 prisma fluent API。因此,在您的情况下,要让某个用户获得 posts,您可以这样写:
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
这仅适用于单个记录,不适用于列表。要检索所有记录的数据,您需要使用片段。例如。要获得关系 post 数据和用户数据,您可以这样写:
const fragment = `
fragment UserWithPosts on User {
id
name
email
posts {
id
title
}
}
`
const userWithPosts = await prisma.users().$fragment(fragment)
希望对您有所帮助。