繁体   English   中英

如何在使用Prisma构建的REST API中查询嵌套数据

[英]How to query nested data in a REST API built with Prisma

我正在使用ExpressPrisma构建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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM