问题描述
这是我的模型:
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 天后过期。