我是否必须创建一个新类型来定义 GraphQL 模式中的对象数组?

Do I have to create a new type to define array of objects in GraphQL schemas?

我正在尝试复制我过去构建的 REST API,其中一个让我思考的部分是,如果我的 table 有一个对象数组。因此,例如,我有一个名为 Profile 的 table,它包含数组 Experience 和 Education,它们严格位于 Profile 下,但也有自己的字段,但没有自己的 table.

当我在 GraphQL 中添加字段时,我遇到了这个问题,除了创建新类型然后将它们与关系相关联然后让解析器或前端确保 Profile 是在 Experience/Education 部分之前首先创建。我不确定这样做是否正确,或者是否有更好的方法。下面是我最终使用的片段……查看管理页面,为个人资料、经验和教育创建了 tables,这是预期的。但是有没有办法只拥有 Profile 并完成类似的事情?或者这更像是 GraphQL 的一种生活方式?

type Profile {
    id: ID! @id
    handle: String!
    company: String
    website: String
    location: String
    status: String!
    githubUsername: String
    experience: [Experience!] @relation(link: INLINE)
    education: [Education!] @relation(link: INLINE)
}

type Experience {
  id: ID! @id
  title: String!
  company: String!
}

type Education {
  id: ID! @id
  title: String!
  company: String!
}

在 Prisma 中,您可以使用 embedded types。您将删除 @relation 指令并将 @embedded 指令添加到您要嵌入的类型中:

type Profile {
    id: ID! @id
    handle: String!
    company: String
    website: String
    location: String
    status: String!
    githubUsername: String
    experience: [Experience!]
    education: [Education!]
}

type Experience @embedded {
  title: String!
  company: String!
}

type Education @embedded {
  title: String!
  company: String!
}

但是,这只有在您对数据库使用 MongoDB 并且使用嵌入式类型时文档中列出了一些特定限制的情况下才有可能。