graphql - Ссылка на другие поля в мутации - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу создать 2 связанных объекта, например, 1 Location и 1 Place, где Place имеет ссылку на Location следующим образом:

type Location {
    id: String
    name: String
}

type Place {
    id: String
    locationId: String
}

Возможно ли это сделать с 1 запросом на мутацию? В настоящее время я делаю это с двумя отдельными запросами на мутацию, как показано ниже:

mutation ($locationName: String!) {
  insert_Location(objects: {name: $locationName}) {
    returning {
      id
    }
  }
}

//in another request, use the id returned from the request above
mutation ($locationId: String!) {
  insert_Place(objects: {locationId: $locationId}) {
    returning {
      id
    }
  }
}

Я знаю, что возможно иметь несколько полей в мутации, чтобы я мог создать 2 Locations in 1 запрос мутации, как показано ниже.

mutation ($locationName: String!) {
  location1: insert_Location(objects: {name: $locationName}) {
    returning {
      id
    }
  }

  location2: insert_Location(objects: {name: $locationName}) {
    returning {
      id
    }
  }
}

Однако, если бы я хотел сделать это, чтобы создать 1 Местоположение и 1 Место, есть ли способ получить созданный Идентификатор местоположения и передать его во 2-е поле, чтобы создать Место

1 Ответ

0 голосов
/ 22 апреля 2020

Для дальнейшего использования:

Как указывало @Xetera, поскольку у двух типов есть отношение внешнего ключа, вы можете сделать мутацию вложенной вставки, где hasura будет обрабатывать установку значения внешнего ключа. В моем случае это выглядело бы примерно так:

mutation ($locationName: String!) {
  insert_Place(
    objects: {
      Location: {data: {name: $locationName}}, //hasura will create Location and assign the id to Place.locationId
    }
  ) {
    returning {
      id
    }
  }
}

Документы здесь для дальнейшего чтения: https://hasura.io/docs/1.0/graphql/manual/mutations/insert.html#insert -an-объект-вместе с его-связанными-объектами-через-отношениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...