#amazon-web-services #graphql #many-to-many #amplify
#amazon-веб-сервисы #graphql #многие ко многим #усиливает
Вопрос:
У меня есть отношения «многие ко многим» в amplify со следующей схемой
type Blog
@model
@searchable
{
id: ID!
title: String!
tags: [BlogTag] @connection(keyName: "byBlog", fields: ["id"])
}
type Tag
@model
@searchable
{
id: ID!
name: String!
blogs: [BlogTag] @connection(keyName: "byTag", fields: ["id"])
}
type BlogTag
@model
@key(name: "byBlog", fields: ["blogID", "tagID"])
@key(name: "byTag", fields: ["tagID", "blogID"])
{
id: ID!
blogID: ID!
tagID: ID!
blog: Blog! @connection(fields: ["blogID"])
tag: Tag! @connection(fields: ["tagID"])
}
И когда я пытаюсь удалить запись BlogTag, я получаю следующую ошибку:
message: "Conflict resolver rejects mutation."
path: ["deleteBlogTag"]
Я пытаюсь удалить запись с помощью следующего кода:
import { API } from "aws-amplify";
import {deleteBlogTag} from "../graphql/mutations";
...
await API.graphql({
query: deleteBlogTag,
variables: { input: { id: blogTagId } },
});
Я не понимаю, почему может возникнуть конфликт. Если бы я удалял блог, и там были бы теги BlogTags, указывающие на этот блог, тогда, конечно, это конфликт. Но почему это конфликт при удалении тега блога? Это то, чего мне не хватает в схеме?
Комментарии:
1. удаление некоторой записи в Blog.tags или в Tag.blogs должно привести к удалению «связующей записи» (BlogTag)… удаление «соединительной записи» оставляет обе подключенные стороны с идентификаторами (тегами или записями в блогах), указывающими в никуда?
2. Я пробовал это. Но я не могу обновить теги в блоге напрямую или наоборот. Я получаю сообщение об ошибке «Ввод переменных содержит имя поля «теги», которое не определено для типа входного объекта «UpdateBlogInput» » Согласно документам, я должен удалить запись BlogTag…
Ответ №1:
Вам необходимо указать параметр _version, т.е.
await API.graphql({
query: deleteBlogTag,
variables: { input: { id: blogTagId, _version: version } },
});
Но я бы посоветовал пройти amplify update api
и удалить разрешение конфликтов синхронизации.