Skip to Content
SymfonyPartie 6 — Doctrine ORM & base de donnéesVue d'ensemble de la partie

Partie 6 — Doctrine ORM & base de données

Public : vous avez le cœur HTTP (Partie 4) et les services (Partie 5). Il manque le modèle de données — le cœur métier de toute application. Objectif de la partie : maîtriser Doctrine ORM (l’ORM de Symfony) : entités et mapping par attributs, relations, requêtes (repositories, DQL, QueryBuilder), migrations et fixtures, cycle de vie, performances (le fameux N+1), et l’intégration d’une recherche (Meilisearch). À la fin, BookLab a son schéma complet.

Ce que vous saurez faire à la fin de cette partie

  • Modéliser des entités avec les attributs #[ORM\...] et comprendre le pattern Data Mapper.
  • Écrire toutes les relations (ManyToOne, OneToMany, ManyToMany, OneToOne) en maîtrisant côté propriétaire / inverse.
  • Interroger la base via repositories, DQL et QueryBuilder, sans écrire de SQL brut.
  • Gérer le schéma avec les migrations et peupler des données de test avec les fixtures.
  • Réagir au cycle de vie des entités (timestamps, événements).
  • Diagnostiquer et corriger le problème N+1 et optimiser les requêtes.
  • Brancher une recherche instantanée (Meilisearch) sur les entités.

Le fil rouge : le schéma de BookLab

On construit le modèle complet : User, Provider, Service, Slot, Booking (avec sa machine à états pending → confirmed → completed / cancelled), Payment, Review. C’est la colonne vertébrale que les Parties 10 (sécurité), 11 (API) et 12 (temps réel) exploiteront.

Chapitres de cette partie

  1. ORM & entités — Data Mapper vs Active Record, entités, mapping par attributs, EntityManager, persist/flush.
  2. Relations — ManyToOne, OneToMany, ManyToMany, OneToOne, côté propriétaire/inverse, cascade, orphanRemoval.
  3. Repositories, DQL & QueryBuilder — requêtes typées, méthodes de repository, jointures, agrégations, pagination.
  4. Migrations & fixtures — versionner le schéma (make:migration, migrate), peupler des données (DoctrineFixturesBundle).
  5. Cycle de vie & événements — lifecycle callbacks, entity listeners, timestamps, événements Doctrine.
  6. Performances — le problème N+1, fetch joins, hydratation, index, pagination, requêtes en lecture seule.
  7. Recherche avec Meilisearch — indexer des entités, recherche instantanée, synchronisation.

Prochain chapitre : 6.1 — ORM & entités.