错误“冲突解决程序拒绝突变”在放大中删除时

问题描述

我有一个简单的全栈放大应用。

这是我的模型:

type Note @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String!
  description: String
  image: String
  NoteType: NoteType @connection
}

type NoteType @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String!
}

我正在尝试删除带有以下负载的便笺:

{
    "query": "mutation DeleteNote($input: DeleteNoteInput!,$condition: ModelNoteConditionInput) {↵  deleteNote(input: $input,condition: $condition) {↵    id↵    name↵    description↵    image↵    createdAt↵    updatedAt↵    NoteType {↵      id↵      name↵      createdAt↵      updatedAt↵    }↵  }↵}↵","variables": {"input": {"id": "0c5e3ced-ffa3-4de8-9010-40b67d5bab68"}}
}

我在响应中看到的是以下 json:

{
    "data": {
        "deleteNote": null
    },"errors": [
        {
            "path": [
                "deleteNote"
            ],"data": {
                "id": "0c5e3ced-ffa3-4de8-9010-40b67d5bab68","name": "bb","description": "bb","image": "icon.png","createdAt": "2020-12-21T12:00:26.743Z","updatedAt": "2020-12-21T12:00:26.743Z"
            },"errorType": "ConflictUnhandled","errorInfo": null,"locations": [
                {
                    "line": 1,"column": 88,"sourceName": null
                }
            ],"message": "Conflict resolver rejects mutation."
        }
    ]
}

代码一直有效,直到我尝试添加 NoteType!这里的外键是否有冲突?

解决方法

使用 ConflictResolution 时,您还需要包含 _version 字段。

{
    "query": "mutation DeleteNote($input: DeleteNoteInput!,$condition: ModelNoteConditionInput) {↵  deleteNote(input: $input,condition: $condition) {↵    id↵    name↵    description↵    image↵    createdAt↵    updatedAt↵    NoteType {↵      id↵      name↵      createdAt↵      updatedAt↵    }↵  }↵}↵","variables": {"input": {"id": "0c5e3ced-ffa3-4de8-9010-40b67d5bab68","_version": "_version value of your note object"}}
}

我还注意到,在删除使用 ConflictResolution 的元素后,它们不会立即从数据库中删除。而是添加了两个标志:_deleted 设置为 true,_ttl 设置为对象在 30 天后过期。