Doctrine 2 : À l'assaut de l'ORM phare de PHP

Gérer ses données avec classe

La programmation orientée objet a fini par prendre une part importante dans le monde de PHP. Bien qu’à priori simple, le besoin récurrent de faire communiquer un code orienté objet avec des sources de données extérieures telles que des base de données cache une grande complexité.

Comment faire correspondre facilement nos objets PHP aux informations dans la base de données ? Comment maintenir la cohérence entre le modèle objet de l’application et le schéma de la base de données ?

Ces problématiques, communes à tous les langages, ont été résolues grâce au mapping objet-relation (Object-Relational Mapping ou ORM). Cette technique permet d’établir un lien étroit entre notre modèle de données et la base de données relationnelles et nous donne ainsi le sentiment d’avoir une base de données orientée objet.

Le sigle ORM (*Object-Relational Mapper*) est aussi utilisé pour désigner les librairies qui implémentent cette technique.

Dans le monde du PHP, plusieurs librairies permettent de remplir ce besoin. nous pouvons citer Propel ou encore Eloquent (L’ORM de Laravel).

Et parmi toutes ces librairies, nous allons découvrir Doctrine 2 qui est très mature et largement supportée par presque tous les frameworks de l’écosystème de PHP (Symfony, Zend Framework, etc.). Nous aborderons entre autres :

  • comment installer et configurer Doctrine 2 ;
  • comment modéliser un système de données orienté objet avec Doctrine 2 ;
  • comment exploiter une base de données avec Doctrine 2.

Il est important de souligner que l’utilisation d’un ORM nécessite une bonne connaissance de la programmation orientée objet en PHP et des notions en modélisation avec des méthodes d’analyse et de conception comme UML1, Merise, etc.

Pour suivre ce cours, il faudra aussi savoir installer et utiliser le gestionnaire de dépendances Composer ainsi qu’un moteur de base de données relationnelle (MySQL, PostgreSQL, MSSQL, Oracle, etc.).


  1. Unified Modeling Language - Langage de modélisation unifié

Les bases de Doctrine 2

  1. Installation et configuration de Doctrine 2

    1. Le fil conducteur du cours

    2. Pourquoi utiliser Doctrine 2 ?

    3. Installation et configuration

  2. Sauvegarder des entités grâce à Doctrine

    1. Création des entités

    2. Lier nos entités à Doctrine

    3. Sauvegarder les entités : À la découverte du gestionnaire d'entités

  3. Récupérer des entités avec Doctrine

    1. Récupérer une entité avec la clé primaire

    2. Récupérer une ou plusieurs entités selon des critères différents

    3. Les index

  4. Modifier et supprimer des entités

    1. La notion d'entité gérée par Doctrine

    2. Supprimer une entité

    3. Mise à jour d'une entité

    4. Fusionner une entité détachée

Les relations avec Doctrine 2

  1. Relation OneToOne - 1..1

    1. L'annotation OneToOne

    2. Interaction avec une entité ayant une relation

    3. La relation OneToOne bidirectionnelle

    4. L'annotation JoinColumn

  2. Relation ManyToOne et OneToMany - 1..n

    1. Relation ManyToOne

    2. Relation OneToMany

    3. Pratiquons : Création d'une entité sondage

  3. Relation ManyToMany - n..m

    1. Relation ManyToMany simple

    2. Relation ManyToMany avec attributs

    3. Création des participations

  4. TP : Finir la modélisation du sytème de sondage

    1. Pratiquons

    2. Proposition de solution

    3. Idées d'amélioration

Exploiter une base de données avec Doctrine 2

  1. À la rencontre du QueryBuilder

    1. Le QueryBuilder

    2. Les repositories personnalisés

  2. Optimiser l'utilisation de Doctrine

    1. Tracer les requêtes Doctrine

    2. Fetch mode (Extra-Lazy, Lazy, Eager) et lazy-loading

    3. Les jointures

  3. Configurer Doctrine pour la production

    1. La gestion du cache

    2. Les proxies

    3. Exemple de configuration

  4. Annexes

    1. Support des transactions

    2. Les références (ou comment économiser une requête)

    3. Owning side - Inverse side : gestion des relations

    4. Les événements Doctrine



Nous avons pu voir tout au long de ce cours que Doctrine apporte une grande facilité dans le traitement des données, le maintien de la cohérence du modèle et la gestion des relations entre les entités.

Les utilitaires en ligne de commandes permettent d’avoir un contrôle total sur la configuration et l’état de notre base de données.

En utilisant Doctrine, il est donc possible de créer et d’exploiter un schéma de données complet sans écrire une seule ligne de SQL.

Retenez néanmoins qu’il existe encore beaucoup de sujets à découvrir et que la documentation officielle reste la référence la plus complète si vous voulez approfondir votre apprentissage de Doctrine.

9 commentaires

Awesome. Vraiment awesome. Ça aborde des sujets pas classiques et peu/mal documentés. Toutes mes félicitations pour ce beau cours qui sera une référence à coup sûr ! :)

Mon seul regret est de ne pas y voir de références aux migrations et aux fixtures !

Hello, à propos de ce tuto, mon avis a beaucoup évolué sur le sujet. Je pense qu’il serait peut être bon d’ouvrir un nouveau chapitre qui parle de doctrine "autrement".

On pense souvent que doctrine impose beaucoup de choses. Mais c’est relativement faux, Doctrine se débrouille pour nous donner beaucoup d’outils afin d’avoir un code homogène, et non quelques modèles qui se baladent tout seuls.

J’en parle au cours d’une conférence au SymfonyLive. Plus d’infos sont dispo dans les slides que nous avons publié ici: http://talks.nekland.fr/Doctrine

Salut Nek,

C’est dommage, parce que les slides ne permettent pas (en tout cas pour moi) de comprendre vraiment le propos. Utilisant Doctrine tous les jours, ça me frustre un peu. ^^ Si le cœur t’en dit, n’hésite pas à faire un article ou un billet. :D

+1 -0

C’est dommage, parce que les slides ne permettent pas (en tout cas pour moi) de comprendre vraiment le propos. Utilisant Doctrine tous les jours, ça me frustre un peu. ^^ Si le cœur t’en dit, n’hésite pas à faire un article ou un billet. :D

John

D’ici 6 mois (espérons moins) le talk sera en ligne sur la chaîne youtube de sensiolabs.

L’idée c’est de ne pas se cantonner à faire des entités bête et méchantes qui ont des getter et setter mais d’aller un peu plus loin.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte