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

时间:2019-08-29 00:30:47

标签: graphql prisma prisma-graphql

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

当我在GraphQL中添加字段时,我碰到了这个问题,除了创建新类型,然后将它们与关系相关联之外,实际上并没有一个可靠的解决方案,然后让解析器或前端确保首先创建配置文件在体验/教育部分之前。我不确定这是正确的方法,还是有更好的方法。下面是我最终使用的代码的片段…查看管理页面,这里有为期望的Profile,Experience和Education创建的表。但是有没有办法只拥有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!
}

1 个答案:

答案 0 :(得分:1)

在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并且在使用嵌入式类型时文档中列出了一些特定限制时,这才可能实现。