如何在一个突变中创建嵌套节点?

2024-03-03

嗨,我正在尝试在我的上写入数据https://www.graph.cool/ 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
}

例如,我想在一次突变中同时创建一家新公司、其新所有者和多个地址。对于地址,我还需要创建一个新联系人。


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

mutation createNestedCompany {
  createCompany(
    owner: {
      name: "Mickey"
      email: "[email protected] /cdn-cgi/l/email-protection"
    }
    addresses: [{
      street: "A street"
      city: "A city"
      country: "A country"
      contacts: [{
        name: "Mickey"
        email: "[email protected] /cdn-cgi/l/email-protection"
        phone: "+1 23456789"
      }]
    }, {
      street: "B street"
      city: "B city"
      country: "B country"
      contacts: [{
        name: "Minney"
        email: "[email protected] /cdn-cgi/l/email-protection"
        phone: "+9 87654321"
      }]
    }]
  ) {
    id
    owner {
      id
    }
    addresses {
      id
      contacts {
        id
      }
    }
  }
}

请注意,createCompany突变有对象参数owner和列表对象参数addresses. addresses有一个嵌套的contacts列表对象参数。

使用 Apollo Client,我们使用 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: "[email protected] /cdn-cgi/l/email-protection"
  }, 
  addresses: [{
    street: "A street"
    city: "A city"
    country: "A country"
    contacts: [{
      name: "Mickey"
      email: "[email protected] /cdn-cgi/l/email-protection"
      phone: "+1 23456789"
    }]
  }, {
    street: "A street"
    city: "A city"
    country: "A country"
    contacts: [{
      name: "Minney"
      email: "[email protected] /cdn-cgi/l/email-protection"
      phone: "+9 87654321"
    }]
  }]
}

并用变量调用突变:

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

变量类型CompanyownerUser and [CompanyaddressesAddress!]取决于以下的组合多重性(对一;对多),相关型号 (Company and User; Company and Address) and 相关领域 (owner; addresses)。当您导航到 GraphQL Playground 文档时,您可以找到所有类型名称createCompany突变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在一个突变中创建嵌套节点? 的相关文章

随机推荐

  • Laravel:“users”数据库表中的“remember_token”是什么?

    使用是否安全remember token在用户表中用于验证用户进入应用程序 这个令牌的目的是什么 目前 我在表单中使用它来检查用户是否已登录 如果令牌不存在 我将显示登录屏幕 每次用户注销时 都会重新生成此令牌 不 它不应该用于身份验证 框
  • RMI 何时建立 TCP 连接?

    我有一个测试程序T which 获取一个存根Remote来自服务器上 RMI 注册表的对象 OS 在数百个并行线程中 调用该对象上的方法O 我可以看到该服务器S有许多 RMI TCP 连接 线程 我原以为只有一个 因为只有一个存根O on
  • PHP header() 和 exit() 会在重定向之前安全地终止脚本吗?

    以下是保护仅限用户区域的安全方法吗 if isset SESSION username redirect SITE ROOT st pages login using function redirect url header Locatio
  • 在 bash 中循环文本文件的每一行

    文本如下所示 428 http www youtube com watch v aqlJl1LfDP4 NEW YORK NEW YORK FRANK SINATRA YouTube moc ebutuoy www 1 0 0 20 96
  • 获取 - LMC 指令的执行周期

    我必须为每个小人计算机指令 ADD SUB BR BRP 等 定义步骤 并且我在分支指令和 COB 或停止指令 方面遇到问题 我理解每条指令开头的获取部分 电脑 gt 三月 多重耐药 gt 红外 但我不确定在执行部分添加什么才能使指令真正正
  • 在 Jenkins 中发布 Karma 单元测试

    Jenkins http jenkins ci org 已经构建了我的 Maven Java 项目 我想要的结果karma http karma runner github io 单元测试显示在 Jenkins 中 但不幸的是我无法在 Je
  • 在未安装 Qt 的计算机上运行 Qt 应用程序。 QCamera 没有看到可用的设备

    我正在开发一个网络 GUI 应用程序 在另一台未安装 Qt 的计算机上测试应用程序 但是当我启动应用程序时 QCamera 可用设备 http qt project org doc qt 5 0 qtmultimedia qcamera h
  • GridView 中的随机图像

    我想知道 GridView 中是否有随机图像 下面的代码对我来说效果很好 但启动活动时 GridView 中的图像不是随机的 我应该修改以下代码以使其随机 Layout
  • 如何使用sorted-map-by按值对地图进行排序?

    我根本无法理解文档 我想要一个排序的地图 xxx 它根据值对地图进行排序 我怎么做 Thanks 另一种方法是在比较器函数中比较原始映射的值 def my map chad 3 bob 5 sammy 4 sort by keys asce
  • Play 应用程序中使用的 SBT 覆盖范围“排除”

    我在 Play 应用程序中使用了 sbt scoverage 我使用以下配置来排除反向和路由生成的文件 coverageExcludedPackages Reverse Routes 但是 这只能排除生成的 Reverse scala 文件
  • kubectl 推出状态后获取新 pod 名称之一 | kubectl get pods --field-selector 返回终止 pod

    问题是在部署新部署后 kubectl apply f deployment yml 假设使用一个副本进行部署 Kubernetes 将创建第二个 pod 并关闭前一个 pod 到目前为止一切正常 但是在 kubectl apply 之后 我
  • 如何飞往react-leaflet中的某个位置

    所以我对反应和传单真的很陌生 但我想做的基本上就是让用户输入一些输入 然后按回车键后 触发一个事件 然后该事件飞到从该输入生成的坐标 我正在使用地理编码 经纬度坐标已成功生成 但是我不知道如何使地图飞到那个位置 这是我到目前为止所拥有的 i
  • docker-compose:为什么代理和应用程序服务因主机名而失败?

    以下是 v2 规范中工作的 docker compose 文件 version 2 volumes webroot driver local services app Launch uwsgi application server buil
  • Dialogflow 响应时间限制可以修改吗?

    我正在使用网络钩子在对话流上制作一个机器人 我收到错误 DEADLINE EXCEEDED 我的 webhook 需要 5 秒多一点的时间才能返回响应 有没有办法让时间超过5秒 这不可能 一种可能性是 例如 如果您有一个需要一些时间的后台任
  • 点击按钮后文本会恢复

    我有一个按钮 在整个程序中他可以更改自己的名字 原名 线 然后重命名为 bar 当被命名为 bar 并且我按下它时 它会执行以下代码 代码中是变量 bt3 UIView animateWithDuration 1 delay 0 optio
  • bash 获取末尾有 exit 命令的文件

    cat gt file1 sh lt lt EOF FILE1 echo before source source file2 sh echo after source func1 EOF FILE1 cat gt file2 sh lt
  • Python 3 整数地址[重复]

    这个问题在这里已经有答案了 x 300 y 300 print id x id y a 300 300 print id a 0 id a 1 在执行上面的代码时 我得到不同的地址x and y但相同的地址a 0 and a 1 谁能告诉我
  • 如何在Visual Studio 2010中分析程序的内存使用情况?

    有没有办法检查 VS 2010 中编码的程序中分配了哪些内存 我注意到我最近制作的一个程序随着时间的推移不断使用越来越多的内存而不释放任何内存 另外 有没有关于代码设计的文章可以教您良好的内存管理 我似乎在谷歌上搜索了错误的术语 因为我不断
  • 如何获取 Google 文档图像的 url

    我有一个 Google 文档 其中包含一张图像 我找到了图像objectId如这里所述https developers google com docs api reference rest v1 InlineObject https dev
  • 如何在一个突变中创建嵌套节点?

    嗨 我正在尝试在我的上写入数据https www graph cool https www graph cool 带有突变的 db 我的项目是一个 React Web 应用程序 我使用 Apollo 作为 graphql 客户端 使用 gr