From 685b78634079563543a02be66ff7cb914b33b355 Mon Sep 17 00:00:00 2001
From: Tejas Khanolkar <44199099+tejas2008@users.noreply.github.com>
Date: Thu, 9 Jan 2025 16:17:11 -0800
Subject: [PATCH] =?UTF-8?q?chore:=20added=20cascade=20delete=20sections=20?=
=?UTF-8?q?in=20Has=20One=20and=20Has=20Many=20data=20mod=E2=80=A6=20(#818?=
=?UTF-8?q?9)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* chore: added cascade delete sections in Has One and Has Many data model relationships
* moved title of section inside ts and js frameworks
* nit fix
---
.../data-modeling/relationships/index.mdx | 43 +++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/src/pages/[platform]/build-a-backend/data/data-modeling/relationships/index.mdx b/src/pages/[platform]/build-a-backend/data/data-modeling/relationships/index.mdx
index 7e3934edfcf..f36b8f92d7d 100644
--- a/src/pages/[platform]/build-a-backend/data/data-modeling/relationships/index.mdx
+++ b/src/pages/[platform]/build-a-backend/data/data-modeling/relationships/index.mdx
@@ -439,6 +439,29 @@ do {
+
+
+### Handling orphaned foreign keys on parent record deletion in "Has Many" relationship
+
+```ts
+// Get the IDs of the related members.
+const { data: teamWithMembers } = await client.models.Team.get(
+ { id: teamId },
+ { selectionSet: ["id", "members.*"] },
+);
+
+// Delete Team
+await client.models.Team.delete({ id: teamWithMembers.id });
+
+// Delete all members in parallel
+await Promise.all(
+ teamWithMembers.members.map(member =>
+ client.models.Member.delete({ id: member.id })
+));
+```
+
+
+
## Model a "one-to-one" relationship
Create a one-to-one relationship between two models using the `hasOne()` and `belongsTo()` methods. In the example below, a **Customer** has a **Cart** and a *Cart* belongs to a **Customer**.
@@ -794,6 +817,26 @@ val cart = Amplify.API.query(
+
+
+### Handling orphaned foreign keys on parent record deletion in "Has One" relationship
+
+```ts
+// Get the customer with their associated cart
+const { data: customerWithCart } = await client.models.Customer.get(
+ { id: customerId },
+ { selectionSet: ["id", "activeCart.*"] },
+);
+
+// Delete Cart if exists
+await client.models.Cart.delete({ id: customerWithCart.activeCart.id });
+
+// Delete the customer
+await client.models.Customer.delete({ id: customerWithCart.id });
+```
+
+
+
## Model a "many-to-many" relationship
In order to create a many-to-many relationship between two models, you have to create a model that serves as a "join table". This "join table" should contain two one-to-many relationships between the two related entities. For example, to model a **Post** that has many **Tags** and a **Tag** has many **Posts**, you'll need to create a new **PostTag** model that represents the relationship between these two entities.