Sikau

Prisma · Day 8 · about 35 min

Nested writes

create, connect and connectOrCreate across relations.

One call, many tables

Placing an order touches three tables: find the customer, insert the order, insert each item. A nested write does it in one call — and Prisma runs it in a transaction, so either everything is saved or nothing is.

create, connect, connectOrCreate

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

const order = await prisma.order.create({
  data: {
    customer: { connect: { email: "[email protected]" } },
    items: {
      create: [
        { qty: 2, dish: { connect: { name: "Momo" } } },
        { qty: 1, dish: { connect: { name: "Masala tea" } } },
      ],
    },
  },
  include: { items: { include: { dish: true } } },
});
console.log(order.items.map((i) => `${i.qty} × ${i.dish.name}`));

await prisma.dish.create({
  data: {
    name: "Lassi", price: 90, veg: true,
    category: { connectOrCreate: { where: { name: "dessert" }, create: { name: "dessert" } } },
  },
});

await prisma.order.update({
  where: { id: order.id },
  data: { items: { create: { qty: 1, dish: { connect: { name: "Lassi" } } }, deleteMany: { qty: 1, dishId: 6 } } },
});
console.log(await prisma.orderItem.count({ where: { orderId: order.id } }));

The rest of this lesson

  • Nested updatesexplain
  • connectOrCreate for shared rowsexplain
  • Customer missing?predict
  • Nested write operationmatch
  • Your turnwrite code
  • Badge quizquiz
  • What you learnedrecap

Continue this lesson free — run real code in your browser

Continue with Google

See all 15 lessons of Prisma