У меня есть тип 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!)
? Спасибо!