AWS усиливает многие-ко-многим — удаление не работает

#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 и удалить разрешение конфликтов синхронизации.