GraphQL 突变中的子类型

Posted

技术标签:

【中文标题】GraphQL 突变中的子类型【英文标题】:Subtypes in GraphQL mutation 【发布时间】:2019-11-18 07:00:22 【问题描述】:

我正在尝试在 graphql 突变中指定一个子类型 使用 AWS Amplify 和 AWS AppSync。

mutation CreatePhoneType 
  createPhoneType(input: 
    desc: "Mobile Phone"
  ) 
    id
    desc
  


mutation CreatePhone 
  createPhone(input: 
    number: "+91 704-011-2342",
    phonetype:  id: "f6b3c538-378a-48d1-a264-96dfef4472a4"     
  ) 
    id
    number,
    phonetype 
      id
    
  

这是架构定义:

type Phone @model 
  id: ID!
  number: AWSPhone!
  phonetype: PhoneType
  createdAt: AWSDateTime
  updatedAt: AWSDateTime


type PhoneType @model 
  id: ID!
  desc: String!
  createdAt: AWSDateTime
  updatedAt: AWSDateTime

我正在尝试插入新的电话值。 Phone 类型具有PhoneType 的子类型。我已成功创建 PhoneType,并希望将现有电话类型作为突变的一部分来创建电话值。我试过指定ID!但这不起作用。在 GraphQL 突变中创建新值时,如何指定现有子类型? 我检查了 GraphQL 文档,但没有很多信息。

【问题讨论】:

【参考方案1】:

需要添加@connection才能生成相关类型。

所以电话应该是:

type Phone @model 
  id: ID!
  number: AWSPhone!
  phonetype: PhoneType @connection
  createdAt: AWSDateTime
  updatedAt: AWSDateTime

执行此操作后,生成的类型可供参考。

所以现在可以了:

mutation CreatePhone 
  createPhone(input: 
    number: "+91 704-011-2342",
    phonePhonetypeId: "f6b3c538-378a-48d1-a264-96dfef4472a4"  
  ) 
    id
    number
  

【讨论】:

以上是关于GraphQL 突变中的子类型的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 突变中的自定义类型

突变中的 GraphQL 嵌套数据

具有自定义标量类型的 GraphQL.js 突变

从另一个突变中调用 GraphQL 突变?

突变中的 GraphQL 嵌套节点 - 对象文字只能指定已知属性,并且类型中不存在“天”

如何修复 graphql 突变类型名错误