[英]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()
它只返回我的帖子。
[
{
"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的任何良好文档。
要查询关系数据,您需要使用片段或prisma 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)
参见: https : //www.prisma.io/docs/prisma-client/basic-data-access/reading-data-JAVASCRIPT-rsc2/#selecting-fields
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.