Skip to contentPedro Farbo
Lesson 9 / 2560 min

Prisma ORM

Prisma ORM

Prisma is a modern ORM that makes database work much easier.

Installation

bash
npm install prisma @prisma/clientnpx prisma init

Connection Configuration

env
# .envDATABASE_URL="postgresql://postgres:postgres@localhost:5432/ecommerce"

Defining Schema

prisma
// prisma/schema.prismagenerator client {  provider = "prisma-client-js"} datasource db {  provider = "postgresql"  url      = env("DATABASE_URL")} model User {  id        String   @id @default(uuid())  email     String   @unique  name      String  password  String  role      Role     @default(USER)  createdAt DateTime @default(now())  updatedAt DateTime @updatedAt} enum Role {  USER  ADMIN} model Product {  id          String   @id @default(uuid())  name        String  slug        String   @unique  description String?  price       Decimal  @db.Decimal(10, 2)  stock       Int      @default(0)  category    Category @relation(fields: [categoryId], references: [id])  categoryId  String  createdAt   DateTime @default(now())  updatedAt   DateTime @updatedAt} model Category {  id       String    @id @default(uuid())  name     String    @unique  slug     String    @unique  products Product[]}

Running Migrations

bash
# Create migrationnpx prisma migrate dev --name init # Generate clientnpx prisma generate # View database (GUI)npx prisma studio

Prisma Client Setup

typescript
// src/config/database.tsimport { PrismaClient } from '@prisma/client'; export const prisma = new PrismaClient({  log: ['query', 'error', 'warn'],});

Basic Queries

typescript
// Createconst user = await prisma.user.create({  data: { email: 'john@email.com', name: 'John', password: 'hash' }}); // Find manyconst users = await prisma.user.findMany(); // Find uniqueconst user = await prisma.user.findUnique({  where: { email: 'john@email.com' }}); // Updateconst updated = await prisma.user.update({  where: { id: '123' },  data: { name: 'John Doe' }}); // Deleteawait prisma.user.delete({ where: { id: '123' } });

Queries with Relations

typescript
// Include relationsconst product = await prisma.product.findUnique({  where: { id: '123' },  include: { category: true }}); // Select specific fieldsconst products = await prisma.product.findMany({  select: { id: true, name: true, price: true }});

Summary

  • ✅ Prisma configured with PostgreSQL
  • ✅ Schema defined with models
  • ✅ Migrations created
  • ✅ Basic CRUD queries

Next lesson: Complete CRUD! 🚀

Enjoyed the content? Your contribution helps keep everything online and free!

PIX:0737160d-e98f-4a65-8392-5dba70e7ff3e