具有动态电子邮件地址数的Apollo Graphql变异

时间:2017-04-07 09:01:57

标签: reactjs graphql apollo graphql-tag

我已经成功创建了一个graphql变异,允许我创建一个Staff记录。

mutation addNewStaff {
  createStaff(input: {
    first_name: "Test Name"
    last_name: "Lname"
    nickname: "Nname"
    positionId: 10
    divisionId: 6
    contact_numbers: [
      {number: "66643535"}
      {number: "876876867"}
    ]
    emails: [
      {address: "testuser@gmail.com"}
      {address: "gfdsaasd@gmail.com"}
    ]
    office_location: "OP" 
  }) {
    id
    first_name
    last_name
  }
}

结果是

{
  "data": {
    "createStaff": {
      "id": "16",
      "first_name": "Test Name",
      "last_name": "Lname"
    }
  }
}

电子邮件和contact_numbers是动态字段,这意味着工作人员可以拥有无​​限数量的电子邮件和联系号码(这些电子邮件和联系号码存储在具有员工表的外键的单独数据库表中)。我现在正在使用react和apollo客户端编写此项目的前端代码。我对如何编写用于创建变异的gql代码非常困惑。我无法找到一个很好的例子来说明我想要完成的事情。有人可以指导我如何实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

您可以为突变创建不同的变量,例如:

import gql from 'graphql-tag'

export const addNewStaffMutation = gql`
    mutation addNewStaff(
            $firstName: Sting!, 
            $lastName: String!,
            ...
            $positionId: number!, 
            $divisionId: number!, 
            ...) {
      createStaff(input: {
        first_name: $firstName
        last_name: $lastName
        nickname: "Nname"
        positionId: $positionId
        divisionId: $divisionId
        contact_numbers: [
          {number: "66643535"}
          {number: "876876867"}
        ]
        emails: [
          {address: "testuser@gmail.com"}
          {address: "gfdsaasd@gmail.com"}
        ]
        office_location: "OP" 
      }) {
        id
        first_name
        last_name
      }
    }
`
  

由于您的有效载荷很大,因此我仅在示例中替换了一些参数。

然后,您可以构建react组件并传递所有变量。您可以阅读有关它的更多信息,并在Apollo Mutations上查看一些示例。