Mathieu Desnouveaux

Doctrine Inheritance

Présentation par Rémi Janot sur les stratégies d'héritage Doctrine (STI et CTI) pour mapper l'héritage PHP en base de données au Symfony Live Paris 2026

Sketchnote illustrant l'héritage Doctrine présentée par Rémi Janot au Symfony Live Paris 2026. Le schéma montre un exemple d'héritage PHP : Admin (login, password, permission), Customer (login, password, address) et User (login, password) avec héritage en PHP. La question "Comment en DB ?" est posée. Le discriminant est un type dans la table User mère avec des options : index, discriminator map, enum PHP, limiter les niveaux d'héritage. Il existe aussi la Mapped Superclass. Deux stratégies sont comparées : STI (Single Table Inheritance) avec une table unique, adapté pour peu de types, mais génère beaucoup de champs nullables par type. CTI (Class Table Inheritance) avec des tables filles jointes avec l'id de la table mère, sans champs en plus mais avec un coût des jointures, utiliser des index.

Cette sketchnote a été réalisée lors du Symfony Live Paris 2026 le 27 mars 2026. Elle illustre la présentation "Doctrine Inheritance" donnée par Rémi Janot, qui explique comment mapper les hiérarchies d'héritage PHP en base de données avec Doctrine.

Contenu de la présentation

Rémi Janot part d'un exemple d'héritage PHP classique : une classe User (login, password) dont héritent Admin (avec permission) et Customer (avec address). La question est de savoir comment représenter cet héritage en base de données. Le discriminant est une colonne de type dans la table mère, configurable via une discriminator map, un enum PHP, avec la possibilité de limiter les niveaux d'héritage. La Mapped Superclass est également mentionnée. Deux stratégies principales sont comparées : le STI (Single Table Inheritance) qui utilise une table unique, simple pour peu de types mais génère beaucoup de champs nullables ; et le CTI (Class Table Inheritance) qui crée des tables filles jointes à la table mère via l'id, sans champs superflus mais avec un coût en jointures qu'on peut atténuer avec des index.

Thèmes:
🐘 PHP 📊 Data 🏗️ Architecture
Événement:
🎤 Symfony Live

Source: Rémi Janot
Publié le 31 mars 2026