Хасура: Как я могу добавить новую строку сведений, неявно настраивая внешний ключ для его родительского элемента? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь вставить новую дочернюю строку в сторону «многие» отношения 1: M в Hasura, но предпочел бы не назначать явно идентификатор внешнего ключа.

Я видел здесь примеры того, как одновременно вставить и дочерний, и новый родительский элемент, но я пытаюсь вставить новую дочернюю строку и указать ее на существующий parent без необходимости явно указывать идентификатор.

SQL ниже показывает, что я пытаюсь сделать. Есть ли способ воспроизвести этот эффект с помощью созданных hasura преобразователей gql?

Предполагая

INSERT INTO foo (type) VALUES
    ( 'red' ),
    ( 'green' ),
    ( 'blue' );

Как я могу

INSERT INTO bar (description, foo_id) VALUES
    ( 'testing',     (SELECT id from foo WHERE type='blue') ),
    ( 'another row', (SELECT id from foo WHERE type='red' ) );

использовать синтаксис GQL с сгенерированными hasura преобразователями?

1 Ответ

0 голосов
/ 27 мая 2020

В зависимости от специфики вашего приложения (особенно ограничений разрешений), это может быть возможно путем использования upsert мутации - https://hasura.io/docs/1.0/graphql/manual/mutations/upsert.html

Вот пример, с модели данных, указанные в вопросе:

mutation Test {
  insert_foo_one(
    object: {
      type: "blue", 
      bars: {
        data: [
          { description: "testing" }
        ]
      }
    }, 
    on_conflict: {
      constraint: foo_type_key, # added this constraint
      update_columns: type, 
      where: {type: {_eq: "blue"}}
    }
  ) {
    id
    type
    bars {
      description
      id
    }
  }
}

Нет ссылки на id, за исключением ответов (которые также можно опустить). Можно динамически создавать и передавать тип «синий», «красный» и т. Д. c. и описание. Кажется невозможным сделать 1 insert tho для двух разных значений foo одновременно tho.

Другой вариант - использовать настраиваемые действия - https://hasura.io/docs/1.0/graphql/manual/actions/index.html

...