【问题标题】:Nested mutation GraphQL嵌套变异 GraphQL
【发布时间】:2019-07-15 16:19:16
【问题描述】:

我正在使用 AWS Appsync 和 Amplify。 我的 GraphQL 架构的 sn-p 如下所示:

type Recipe
@model
@auth(rules: [{allow: owner}])
{
 id: ID!
 title: String!
 key: String!
 courses: [Course!]!
}

type Course
@model
@auth(rules: [{allow: owner}])
{
  id: ID!
  name: String!
}

在放大推送时,它会创建 DynamoDB 表 RecipeCourse

阅读了很多教程后,我仍然不明白如何在 GraphiQL 中添加食谱。

如何插入引用课程的新食谱并避免在课程表中重复?

【问题讨论】:

    标签: graphql aws-amplify


    【解决方案1】:

    要在Course 表中创建引用相同Course 且不重复的多个Recipe,您需要设计多对多关系。

    到目前为止,您设计的关系还不足以让 AppSync 理解,您缺少 @connection 属性。您可以阅读this answer on github,了解如何在 AppSync 中设计这种多对多关系

    在设计完关系后,您将使用突变插入数据,AppSync 很可能会为您生成突变代码(如果没有,请在控制台中使用amplify codegen)。然后,您将能够创建数据。

    由于您将 DynamoDB 与多个表一起使用(放大/AppSync 的默认模式),因此您必须:

    • 连续调用多个突变
    • 使用自定义解析器,如this SO answer 中所述

    【讨论】:

    • 非常感谢。我创建了一个多对多的关系。但仍然有点困惑突变应该如何。我不能在一个突变调用中为数据库创建一个带有课程的食谱,对吗?所以首先我必须创建一个食谱,记住它的 ID,然后在额外的突变调用中附加一个课程?
    • 好的,感谢您帮助我在这里指出正确的方向。第一次使用 serverless 和 noSQL :P 这是一种思维转变
    • 但是对于查询数据,您可以在一次调用中显示关联的课程,而无需更改解析器?
    • 是的,如果您要求,对食谱的一次查询将为您提供嵌套课程
    猜你喜欢
    • 2018-11-04
    • 2019-08-24
    • 2020-01-14
    • 2020-04-24
    • 2018-08-24
    • 2021-04-09
    • 2017-07-28
    • 2019-04-10
    相关资源
    最近更新 更多