AWS Amplify Appsync 在创建具有关系的对象时解决错误

Posted

技术标签:

【中文标题】AWS Amplify Appsync 在创建具有关系的对象时解决错误【英文标题】:AWS Amplify Appsync solving error when creating object with relationship 【发布时间】:2020-02-03 19:24:20 【问题描述】:

我正在尝试创建一个具有关系的对象。

我正在使用自动生成的放大突变

当我创建一个没有关系的对象时,操作成功。 当我创建具有关系的对象时,操作失败。

我得到的错误信息是

"The variables input contains a field name 'customer' that is not defined for input object type 'CreateCreditcardInput' "

自动生成的突变如下。

export const createCreditcard = `mutation CreateCreditcard($input: CreateCreditcardInput!) 
  createCreditcard(input: $input) 
    id
    number
    expiration
    customer 
      id
      firstName
      lastName
      phone
      address1
      address2
      city
      state
      postcode
      email
      creditcards 
        nextToken
      
    
    payment 
      id
      paymentType
      creditcard 
        id
        number
        expiration
      
      orderAmount
      order 
        id
        date
        orderStatus
      
    
  

`;

【问题讨论】:

【参考方案1】:

解决方案是将包含关系 ID 的属性从嵌套对象更改为字符串。

产生错误的原件是

id: "", number: 1212112, expiration: "12/20", customer: id:"81d86584-e031-41db-9c20-e6d3c5b005a6"

现在有效的修正是

id: "", number: 1212112, expiration: "12/20", creditcardCustomerId: "81d86584-e031-41db-9c20-e6d3c5b005a6"

【讨论】:

提交更新的基本功能。看来aws-amplify 应该为我们处理这个问题,对吧?我必须相信有一种方法可以转换模型,因为我使用的模型与我现在正在更新的查询中的模型相同。 ? 我能想到的最好的想法是编写一个函数,该函数接受一个嵌套对象,然后将其展平以符合 aws-amplify 的要求。嵌套对象的属性树将累积成一个字符串。所以在这个例子中 creditcard.customer.id => creditcardCustomerId

以上是关于AWS Amplify Appsync 在创建具有关系的对象时解决错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS Amplify AppSync 使用在 Cognito 中创建的 Google 用户登录

AWS Amplify (AppSync + Cognito) 使用每个组织/租户的动态组进行授权

AWS Amplify AppSync GraphQL @Auth 指令:如何禁止为公共用户列出元素

在 React 中使用 AWS Amplify Appsync 上传图像

使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变

AWS- Amplify - Appsync:使用 CLI 从 Android 应用程序更改云资源时,正确的工作流程是啥?