Amplify DataStore如何配置删除Grouprequest时不级联删除关联Group
问题场景
当前定义的GraphQL Schema如下:
type Grouprequest @model @auth(rules: [{ allow: private }, { allow: public, provider: apiKey }]) { groupId: ID! group: Group @hasOne(fields: ["groupId"]) }
执行以下代码删除Grouprequest实例时,关联的Group数据会被自动级联删除:
DataStore.delete(Grouprequest, requestId)
目标:配置Amplify,实现删除Grouprequest记录时,不自动级联删除关联的Group数据。
实现方案
完全可以通过Schema配置实现,无需修改业务层的删除逻辑。
Amplify DataStore 对@hasOne、@hasMany类型的关联关系默认开启级联删除,删除记录时会自动清理所有关联数据,只要在关联指令上显式关闭级联删除开关即可。
- 修改GraphQL Schema,给
@hasOne指令传入cascadesOnDelete: false参数:
type Grouprequest @model @auth(rules: [{ allow: private }, { allow: public, provider: apiKey }]) { groupId: ID! group: Group @hasOne(fields: ["groupId"], cascadesOnDelete: false) }
- 保存Schema后执行推送命令,将配置同步到云端:
amplify push
执行过程中如果弹出Schema变更确认提示,核对变更内容无误后确认执行即可。
- 端侧缓存清理:
本地DataStore会持久化缓存旧的关联规则,云端配置生效后,需要在客户端清理一次本地缓存,避免旧规则导致非预期删除:
// 清除本地持久化存储的缓存数据 await DataStore.clear() // 重新启动数据同步,拉取最新云端数据 await DataStore.start()
注意事项
- 如果你的
Group类型中配置了指向Grouprequest的反向关联(比如@belongsTo字段),需要同步检查反向关联的级联配置,避免反向操作触发非预期的数据删除。 - 配置生效后,删除
Grouprequest记录时只会删除当前表的对应条目,Group表中匹配groupId的记录会完整保留,不会被连带删除。
内容的提问来源于stack exchange,提问作者Ilijanovic
相关产品推荐
相关产品推荐

