【发布时间】:2019-09-06 16:44:09
【问题描述】:
我正在使用 AWS Amplify 和 AppSync 开发一个 Web 应用程序来读取我的数据并将其写入 DynamoDB 表。使用Amplify's GraphQL Transforms,使用@connection 转换很容易在数据类型之间建立连接。我想知道是否可以通过简化或半自动的方式删除相关数据。
假设一个简单的博客示例,其中用户有一个博客,其中有帖子,而这些帖子又拥有其他用户拥有的 cmets。如果帖子被删除,我想删除与该帖子关联的 cmets。如果用户被删除,我想删除他们的博客、帖子和与这些帖子相关的 cmets,以及用户在其他帖子上留下的任何评论。这个例子是设计的,也许希望以某种形式维护这些数据中的一些。但是,在某些情况下,这种行为正是我想要的。
过去在使用 Prisma 时,我使用他们的 @relation 指令来建立类似于使用 Amplify 的 @connection 的关系。
但是,在我想要级联删除的情况下,我会写一些类似的东西:
type Post {
id: ID! @unique
title: String!
body: String!
owner: ID!
comments: [Comment!] @relation(name: "PostComments",
onDelete: CASCADE)
}
我可以使用 onDelete 参数并将其设置为 CASCADE 或 SET_NULL,具体取决于我的处理方式。
有没有办法通过 Amplify 做类似的事情?当然,我可以编写一堆 VTL 或 Lambda 解析器来处理每种情况,但我想先检查是否有更快/更简单的方法来实现它。
【问题讨论】:
-
您能否澄清一下您是如何通过 VTL 做到这一点的?我现在也有同样的问题
-
嘿@JohnStone,很抱歉。我正在从事的项目来了又去。老实说,我什至不记得我最终是否让这种行为起作用了。这是我一直致力于探索这个堆栈的个人项目。免费试用期结束后,我删除了我的 AWS 账户,转而进行更多的移动应用程序开发。我记得VTL有点痛苦,因为我不熟悉它,非常希望我能用javascript写出来。我相信它需要这个:docs.aws.amazon.com/appsync/latest/devguide/…
-
您可以通过使用直接 lambda 自定义解析器来实现所需的结果,而不是在 VTL 中创建自定义解析器。这里有一些文档可供参考: - 介绍文章:timveletta.com/blog/… - 放大文档:docs.amplify.aws/cli/graphql-transformer/function - AWS 的公告文章:aws.amazon.com/blogs/mobile/appsync-direct-lambda
标签: amazon-dynamodb graphql aws-appsync aws-amplify