0 XP
?
Intermédiaire50 min30 XP

Objectifs de cette leçon

  • Installer et configurer Prisma
  • Définir un schéma de base de données
  • Effectuer des requêtes CRUD avec Prisma

Bases de données avec Prisma 🗄️

Introduction à Prisma

Prisma est un ORM (Object-Relational Mapping) moderne pour Node.js. Il facilite les interactions avec la base de données grâce à un schéma typé et des requêtes intuitives.


Installation

npm install prisma @prisma/client
npx prisma init

Définir un schéma

// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}

model User {
  id    String @id @default(cuid())
  email String @unique
  name  String?
  posts Post[]
}

model Post {
  id        String   @id @default(cuid())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  String
  createdAt DateTime @default(now())
}

💡 String? signifie que le champ est optionnel. @default() définit une valeur par défaut.


Générer et utiliser le client

npx prisma migrate dev --name init  # Crée la base de données
// src/db.js
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();

Opérations CRUD

import { prisma } from './db.js';

// CREATE — Créer un utilisateur
const user = await prisma.user.create({
  data: { email: 'alice@test.com', name: 'Alice' }
});

// READ — Lire tous les utilisateurs
const users = await prisma.user.findMany();

// READ — Lire avec filtre
const alice = await prisma.user.findUnique({
  where: { email: 'alice@test.com' }
});

// READ — Lire avec relations
const userWithPosts = await prisma.user.findUnique({
  where: { id: user.id },
  include: { posts: true }
});

// UPDATE — Modifier un utilisateur
const updated = await prisma.user.update({
  where: { id: user.id },
  data: { name: 'Alice Martin' }
});

// DELETE — Supprimer un utilisateur
await prisma.user.delete({ where: { id: user.id } });

Requêtes avancées

// Filtrer + trier + paginer
const results = await prisma.post.findMany({
  where: { published: true },
  orderBy: { createdAt: 'desc' },
  skip: 0,
  take: 10,
  include: { author: { select: { name: true } } }
});

// Compter
const count = await prisma.post.count({
  where: { published: true }
});

Relations

// Créer un utilisateur avec des posts
const user = await prisma.user.create({
  data: {
    email: 'bob@test.com',
    name: 'Bob',
    posts: {
      create: [
        { title: 'Premier article', content: 'Contenu...' },
        { title: 'Deuxième article' }
      ]
    }
  }
});

Résumé

OpérationPrisma
Créerprisma.model.create()
Lireprisma.model.findMany()
Trouverprisma.model.findUnique()
Modifierprisma.model.update()
Supprimerprisma.model.delete()
Compterprisma.model.count()
Filtrerwhere: { ... }
TrierorderBy: { ... }

Exercices 🎯

  1. Crée un schéma avec User, Post, et Comment avec les relations appropriées
  2. Implémente des routes Express pour CRUD sur les posts
  3. Ajoute un endpoint qui retourne les posts avec leurs auteurs et commentaires

⚡ Simulateur — BDD avec Prisma

Étape 1/4
📝 Pseudo-code
1const { PrismaClient } = require("@prisma/client");
2const prisma = new PrismaClient();
3const users = await prisma.user.findMany();
4console.log(users);
⚙️ Exécution
📦 Mémoire
Aucune variable
🔀 Flux d'exécution
require("@prisma/client")
3
Import de Prisma

@prisma/client est généré par Prisma après la définition du schéma dans schema.prisma. Il contient les types et le client.