当前位置: 首页 > 知识库问答 >
问题:

如何在一次变异中创建嵌套节点?

蒋斯伯
2023-03-14

嗨,我正在尝试在我的 https://www.graph.cool/ db 上写入带有突变的数据。我的项目是一个 React Web 应用程序,我使用 Apollo 作为 graphql 客户端和 graphql-tag npm 包作为模板文字解析器。

问题是我不知道如何使用嵌套数据为正确的突变排列 gql 模板字符串。我的架构如下所示,例如请注意,类型“公司”的字段“地址”是“地址”对象类型的数组

type Company {
  name: String!
  website: String
  Owner: User
  Addresses: [Addresses]
}

type User {
  name: String!
  email: String
}

type Address {
  street: String!
  city: String!
  country: String
  contacts: [Contact]
}

type Contact {
  name: String
  email: String
  phone: String
}

例如,我想创建一个新公司,它的新所有者和多个地址在同一时间在一个突变。对于地址,我也需要创建一个新的联系人。

共有1个答案

蒋阳华
2023-03-14

您可以使用我们所谓的嵌套突变来实现这一点。首先,让我们看看如何从GraphiQL操场做到这一点:

mutation createNestedCompany {
  createCompany(
    owner: {
      name: "Mickey"
      email: "mickey@mouse.com"
    }
    addresses: [{
      street: "A street"
      city: "A city"
      country: "A country"
      contacts: [{
        name: "Mickey"
        email: "mickey@mouse.com"
        phone: "+1 23456789"
      }]
    }, {
      street: "B street"
      city: "B city"
      country: "B country"
      contacts: [{
        name: "Minney"
        email: "minney@mouse.com"
        phone: "+9 87654321"
      }]
    }]
  ) {
    id
    owner {
      id
    }
    addresses {
      id
      contacts {
        id
      }
    }
  }
}

请注意,createCompany突变具有对象参数的所有者和列表对象参数的地址的地址有一个嵌套的联系人列表对象参数。

使用Apollo客户端,我们使用GraphQL变量指定输入参数,所以让我们看看在这种情况下它是如何看的:

const createNestedCompany = gql`
  mutation createNestedCompany(
    $owner: CompanyownerUser
    $addresses: [CompanyaddressesAddress!]
  ) {
    createCompany(
      owner: $owner
      addresses: $addresses
    ) {
      id
      owner {
        id
      }
      addresses {
        id
        contacts {
          id
        }
      }
    }
  }
`

使用Apollo调用突变时,我们现在必须将变量指定为对象:

const variables = {
  owner: {
    name: "Mickey"
    email: "mickey@mouse.com"
  }, 
  addresses: [{
    street: "A street"
    city: "A city"
    country: "A country"
    contacts: [{
      name: "Mickey"
      email: "mickey@mouse.com"
      phone: "+1 23456789"
    }]
  }, {
    street: "A street"
    city: "A city"
    country: "A country"
    contacts: [{
      name: "Minney"
      email: "minney@mouse.com"
      phone: "+9 87654321"
    }]
  }]
}

用变量来称呼突变:

this.props.createNestedCompany({ variables })
  .then((response) => {
    console.log('Company, owner and addresses plus contacts created');
  }).catch((e) => {
    console.error(e)
  })

变量类型CompanyownerUser[Companyaddres的地址!]取决于多重性(对一;对多)、相关模型(公司用户公司地址)以及相关字段(所有者地址)的组合。当您导航到createCompany突变时,您可以在GraphiQL游乐场文档中找到所有类型名称。

 类似资料:
  • 问题内容: 我有2个CSV文件:“数据”和“映射”: ‘映射’文件有4列:,,,和。填充所有四个列。 “数据”文件具有这些相同的列,其中填充了列,而其他三列为空白。 我希望我的Python代码来打开这两个文件并为每个数据文件,它的映射,以及从映射文件中值。 我知道只有2列存在时才需要使用dict(需要映射1列),但是当需要映射3列时我不知道如何实现。 以下是我尝试完成的映射的代码: 它返回。 经过

  • 在用Python和其他动态语言工作了4年之后,我又回到了用C++工作。我希望能够使用unordered_map或map类创建一个递归嵌套列表(如上面的Python代码所示)。 我找不到办法去做那件事。 我想要实现的是键应该是char/string类型的,但是要插入的值应该是int类型的。 请告诉我这是怎么做的。 我最接近的是这个 但是我应该重载什么来获得上面的确切语法呢? 提前道谢。

  • 我没有发现答案有什么帮助:作为作者,我想要绘制这样的图: 答案是在RDF中必须考虑三元组,但在这里不是这样吗? (地址,有街道,...) (地址,有邮政编码,...) (Person,has address,...) 我问的另一个原因是,我使用Jena Bean从Java类模型中生成RDF,结果也是一个嵌套结构。现在我想用Apache Jena做同样的事情,但我无法找到答案,文档中没有任何提示,我

  • 问题内容: 说我要制作以下JSON 目前,这就是我实现的方式 似乎应该有一个更好的方法来做到这一点,而不是做更多的事情,然后将它们放置在主体中。有比我正在使用的方法更好的动态构建方法吗? 在此先感谢您的帮助! 问题答案: 如果您处理大量JSON数据,我真的建议您使用Gson或Jackson。这要方便得多,并且两个库都很好地支持与Java对象之间的相互转换(与通过JSONObjects手动构建JSO

  • 本文向大家介绍PHP 中如何创建嵌套 JSON 对象,包括了PHP 中如何创建嵌套 JSON 对象的使用技巧和注意事项,需要的朋友参考一下 JSON结构可以使用以下代码创建-

  • 了解如何在 Dreamweaver 中创建用于控制共享设计元素的页面中的内容的嵌套模板。 嵌套模板是指其设计和可编辑区域都基于另一个模板的模板。嵌套模板对于控制共享许多设计元素的站点页面中的内容很有用,但在各页之间有些差异。例如,基本模板中可能包含更宽广的设计区域,并且可以由站点的许多内容提供者使用,而嵌套模板可能进一步定义站点内特定部分的页面中的可编辑区域。 基本模板中的可编辑区域被传递到嵌套模