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