GraphQL: запрос значения из другой таблицы из мутации

Допустим, у меня есть стол 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'

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

1 ответ

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

mutation addT1($t1Name: String!, $t2Name: String!) {
  createT1(
    input: { 
      T1: { 
        name: $t1Name, 
        t2ToT2: { connectByT2: { name: $t2Name } }
      }
    }
  ) {
    t1 {
      t1Id
      name
      t2ByT2 {
        name
      }
    }
  }
}
Другие вопросы по тегам