Nested Update
👨💼 the Prisma Client is pretty powerful and expressive with its nested queries.
For example:
await prisma.ship.update({
select: { id: true },
where: { id: 1 },
data: {
name: 'The Black Pearl',
captain: {
update: {
name: 'Jack Sparrow',
},
},
},
})
This does not result in a single query. This is actually multiple queries in a
single transaction! Here's an example of what the queries generated from that
nested update may look like:
BEGIN
SELECT "public"."Ship"."id" FROM "public"."Ship" WHERE ("public"."Ship"."id" = $1 AND 1=1)
SELECT "public"."Ship"."id", "public"."Ship"."name", "public"."Ship"."captainId" FROM "public"."Ship" WHERE ("public"."Ship"."id" = $1 AND 1=1) OFFSET $2
UPDATE "public"."Ship" SET "name" = $1 WHERE ("public"."Ship"."id" = $2 AND 1=1)
COMMIT
Cool right? So, turns out our entire transaction can be represented as a nested
query with Prisma rather than multiple calls. The images just need multiple
subqueries to handle the delete, update, and create that can happen as a part
of this note update. Give it a shot and think about which approach you prefer.