Doctrine est un ORM, pour object-relational mapping, soit mapping objet-relationnel en français.

Attends, euh... c'est quoi un ORM ???

Un ORM, c'est en quelque sorte une interface entre votre base de données et vous. Il s'agit d'un ensemble de classes (ou « bibliothèques ») qui fonctionne de manière indépendante. Le but est de nous permettre d'accéder au contenu de la base de données avec un langage orienté objet (PHP en l'occurrence).

Pour comprendre concrètement comment Doctrine fonctionne, voyons un exemple. Imaginons que l'on possède une table contenant des articles, avec un titre, un contenu et une certaine catégorie. On pourra y accéder avec un objet Article en PHP :

<?php
$article = new Article();
$article->title     = 'Tutoriel Doctrine';
$article->content   = 'blablabla...';
$article->categorie = $monObjetCategorie;
$article->save();

Et voilà !
En quelques lignes, nous avons créé un objet article, l'avons rempli avec des données, et l'avons sauvegardé. Et c'est tout. Doctrine se charge tout seul d'insérer ces données dans les champs de notre table, on ne touche pas au code SQL.

Et c'est l'un des gros avantages d'un ORM : si vous déplacez votre projet sur un autre serveur, avec un autre SGBD, vous n'aurez pas à vous soucier des différences qu'il peut y avoir entre les langages. En effet, Doctrine repose sur PDO et supporte les mêmes drivers. Vous n'aurez pas non plus à écrire les classes (par exemple Categorie ou Article) vous-même, elles sont générées automatiquement. Ce qui ne veut pas dire qu'on ne pourra pas les personnaliser, bien au contraire.

Voici un schéma pour comprendre rapidement comment Doctrine s'articule :

Image utilisateur

Doctrine est constitué de deux couches distinctes :

  • Je vous l'ai dit, l'une repose sur PDO, à laquelle elle ajoute des fonctionnalités, c'est ce qui s'appelle la DBAL : Database Abstraction Layer. Elle pourrait s'utiliser directement, sans la couche ORM. Son but, comme son nom l'indique, est de fournir une couche d'abstraction, c'est-à-dire que grâce à elle, on ne se soucie plus de comment fonctionne notre base de données. À ce niveau-là, on n'utilise pas encore de langage-objet.

  • La deuxième couche (ORM, donc) permet de faire le « lien » entre nos objets PHP et la DBAL, c'est ce qui nous fournit une interface orientée objet pour manipuler la base de données. Elle interagit avec la DBAL et nous retourne des résultats sous forme d'objets.

Ne faites pas de confusion avec PDO : j'ai parlé d'abstraction dans le schéma, mais PDO ne propose pas d'abstraction de la base de données. Elle fournit simplement des fonctions communes, peu importe le SGBD, mais il faut quand même se plier au langage « local ».

Bon assez bavardé, je suppose que vous êtes tous impatients de l'installer ! Comment ça, non ? :p

L'auteur