GraphQL: запрос значения из другой таблицы из мутации - PullRequest
1 голос
/ 09 июля 2019

Допустим, у меня есть таблица t1, которая является внешним ключом для другой таблицы t2. Для простоты t2 имеет только столбцы name и id, которые являются уникальными. Я храню идентификатор в t1.

Моя проблема в том, что я хочу написать мутацию, в которой я знаю имя, но я не знаю идентификатор, когда иду хранить что-то в t1. Есть ли способ сделать запрос внутри моей мутации, чтобы он преобразовал значение в моем утверждении?

Возможно, плагин, который я могу добавить в свой проект?

В результате я передаю известное имя, но хочу сохранить идентификатор

mutation addT1(
  $knownT2Name: String!,
) {
  createT1 (
    input: {
      t1: {
        id: $component
        # Is there a way to convert this to the id inside the query
        # Or do I need to query for the id with the name first then pass that in?
        t2_id: $knownT2Name
      }
    }
  ) {
    t1 {
      id
      t2_id
    }
  }
}

Это простой пример. Причина, по которой я не хочу запрашивать идентификатор с именем, заключается в том, что t1 является внешним ключом для множества других таблиц с такой же ситуацией, и я не хочу делать 9+ запросов просто для преобразования каждая строка в целочисленный идентификатор.

Я бы предпочел сделать что-то вроде этого:

mutation addT1(
  $knownT2Name: String!,
) {
  createT1 (
    input: {
      t1: {
        id: $component
        t2_id: t2Byt2(name: $knownT2Name) { id }
      }
    }
  ) {
    t1 {
      id
      t2_id
    }
  }
}

Где t2Byt2(name: $knownT2Name) { id } будет подзапросом, который передает имя и получает идентификатор, затем сохраняет идентификатор в 't2_id'

Я смотрю на плагин вложенных мутаций для постграфа ( Вот GitHub ), но у меня не было никакой тяги. Это не совсем то, что я ищу.

1 Ответ

1 голос
/ 09 июля 2019

Для простых отношений, я полагаю, вы хотите что-то вроде: (используя плагин вложенных мутаций). Это работает только на CREATE. Не повезло с UPSERT.

mutation addT1($t1Name: String!, $t2Name: String!) {
  createT1(
    input: { 
      T1: { 
        name: $t1Name, 
        t2ToT2: { connectByT2: { name: $t2Name } }
      }
    }
  ) {
    t1 {
      t1Id
      name
      t2ByT2 {
        name
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...