27. ORM: Prisma
Современный TypeScript ORM с type-safety и автогенерацией типов.
Установка
Заголовок раздела «Установка»npm install prisma @prisma/clientnpx prisma initdatasource db { provider = "postgresql" url = env("DATABASE_URL")}
generator client { provider = "prisma-client-js"}
model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] createdAt DateTime @default(now())}
model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int}Миграции
Заголовок раздела «Миграции»npx prisma migrate dev --name initnpx prisma generateCRUD операции
Заголовок раздела «CRUD операции»import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
// Createconst user = await prisma.user.create({ data: { name: 'John Doe', posts: { create: [ { title: 'First Post', content: 'Hello World!' } ] } }, include: { posts: true }});
// Readconst users = await prisma.user.findMany({ where: { email: { contains: '@example.com' } }, include: { posts: true }});
// Updateawait prisma.user.update({ where: { id: 1 }, data: { name: 'John Updated' }});
// Deleteawait prisma.user.delete({ where: { id: 1 } });Транзакции
Заголовок раздела «Транзакции»await prisma.$transaction([ prisma.user.update({ where: { id: 1 }, data: { balance: { decrement: 100 } } }), prisma.user.update({ where: { id: 2 }, data: { balance: { increment: 100 } } })]);Следующий урок: ORM Comparison →