Как обновить массив/вложенное поле при выдаче мутации обновления в Graphcool/GraphQL?

У меня есть тип Post, чем поле tag, которое может быть связано со многими записями Tag (отношение «человек ко многим»). Проблема, с которой я сталкиваюсь, заключается в том, что при обновлении Post мне нужно как создать, так и связать новые Tag для тегов, которые еще не существуют, сохраняя при этом существующие отношения Post-> Tag. По сути, то, что я ищу, похоже на upsert при выпуске обновления мутации для вложенного поля «один ко многим».

Вот моя схема:

type Post @model {
  createdAt: DateTime!
  createdBy: User @relation(name: "PostsByUser")
  description: String @defaultValue(value: "''")
  id: ID! @isUnique
  tags: [Tag!]! @relation(name: "TagsOfPost")
  ...
}

type Tag @model {
  id: ID! @isUnique
  tag: String!
  createdBy: User @relation(name: "TagsByUser")
  createdAt: DateTime!
  posts: [Post!]! @relation(name: "TagsOfPost")
}

Эта мутация обновляет Post и добавляет новые теги, но перезаписывает все существующие значения в поле tag Post:

mutation updatePost(
  $id: ID!
  $createdById: ID!
  $timestamp: DateTime!
  $description: String
  $tags: [PosttagsTag!]!
) {
  updatePost(
    id: $id
    createdById: $createdById
    timestamp: $timestamp
    description: $description
    tags: $tags
  ) {
    id
    timestamp
    description
    tags {
      id
      tag
    }
    createdBy {
      id
      username
    }
  }
}

Я наткнулся на этот пост от @marktani, но непонятно, как реализовать описанный им комбинированный метод:

Комбинированный Вы также можете использовать теги и tagsId в одной и той же мутации, это соединит новый узел Tutorial со всеми тегами в tagsIds и соединит его с новыми тегами в tags. Это то, что вы хотите сделать, если хотите разрешить теги только с уникальным текстом, поэтому для нового учебника, вероятно, будут некоторые теги, которые уже существуют, а некоторые необходимо создать.

В настоящее время невозможно сделать это с помощью одной мутации? Потребуется ли вторая мутация после обновления сообщения новыми тегами, чтобы восстановить связи между Post и существующими идентификаторами Tag, т. е. необходимость многократного вызова addToTagsOfPost(tagsTagId: ID! postsPostId: ID!)? Спасибо!


person Bob T    schedule 16.11.2017    source источник


Ответы (1)


Итак, в настоящее время существует ошибка Graphcool, из-за которой tags и tagsIds передаются в мутация создаст и свяжет вновь созданные Tags, но не добавит tagsIds связей к существующим Tags. Я разместил проблему в репозитории Graphcool на GitHub, и они подтвердили это — https://github.com/graphcool/framework/issues/1288

person Bob T    schedule 20.11.2017