Мутация Apollo Graphql с динамическим числом адресов электронной почты

Я успешно создал мутацию 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: "[email protected]"}
      {address: "[email protected]"}
    ]
    office_location: "OP" 
  }) {
    id
    first_name
    last_name
  }
}

результат

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

email и contact_numbers являются динамическими полями, что означает, что у персонала может быть неограниченное количество адресов электронной почты и контактных номеров (они хранятся в отдельных таблицах базы данных с внешним ключом к таблице персонала). Сейчас я пишу код внешнего интерфейса для этого проекта, используя клиент react и apollo. Я очень запутался в том, как написать код gql для создания мутации. Я не могу найти хороший пример того, что пытаюсь достичь. Может ли кто-нибудь посоветовать мне, как этого добиться?


person thevinci    schedule 07.04.2017    source источник
comment
Возможный дубликат Graphql с вложенными мутациями?   -  person Locco0_0    schedule 07.04.2017
comment
Нет, меня беспокоит другое. Я уже реализовал мутацию на стороне сервера. Приведенный выше код работает на graphiql. Теперь я хочу знать, как это сделать на стороне клиента с помощью apollo / gql.   -  person thevinci    schedule 07.04.2017


Ответы (1)


Вы можете создавать разные переменные для своей мутации, например:

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: "[email protected]"}
          {address: "[email protected]"}
        ]
        office_location: "OP" 
      }) {
        id
        first_name
        last_name
      }
    }
`

Я заменил только некоторые из ваших аргументов для примера, так как ваша полезная нагрузка довольно велика.

Затем вы можете просто создать свой react компонент и передать ему все переменные. Вы можете узнать больше об этом и увидеть некоторые примеры на странице Apollo Mutations.

person Marco Daniel    schedule 25.02.2019