Qu'est-ce que Doctrine ORM et pourquoi l'utiliser ?
Doctrine ORM (Object-Relational Mapping) est une bibliothèque PHP puissante qui permet aux développeurs de travailler avec des bases de données en adoptant une approche orientée objet, sans écrire de requêtes SQL brutes. Doctrine ORM est le standard de facto pour Symfony, mais peut également être utilisé dans tout autre projet PHP (Laravel, Yii, PHP pur).
Le problème principal résolu par Doctrine : le décalage entre le modèle relationnel (tables, lignes, colonnes) et le modèle objet (classes, objets, propriétés). Doctrine convertit automatiquement les objets PHP en enregistrements de base de données et vice versa.
Fonctionnalités clés :
- Création automatique du schéma de base de données — à partir des annotations/attributs dans les classes
- Repository Pattern — méthodes pratiques pour rechercher et filtrer les données
- DQL (Doctrine Query Language) — langage de requêtes orienté objet
- Lazy Loading — chargement des données associées uniquement si nécessaire
- Migrations — gestion des évolutions du schéma de base de données
- Transactions — prise en charge complète d'ACID
- Mise en cache — des métadonnées, des requêtes et des résultats
Doctrine ORM convient à des projets de toutes tailles : des petits sites web aux systèmes d'entreprise avec des centaines de tables.
Installation de Doctrine ORM
L'installation se fait via Composer (le gestionnaire de paquets PHP). Ouvrez un terminal à la racine de votre projet et exécutez :
composer require doctrine/orm
Pour travailler avec Symfony, il est recommandé d'installer le paquet DoctrineBundle :
composer require symfony/orm-pack
composer require --dev symfony/maker-bundle # pour la génération de code
Si vous utilisez du PHP pur sans framework, vous devrez également installer le pilote pour votre base de données :
composer require doctrine/dbal
composer require doctrine/annotations # pour les annotations (PHP 7.4 et inférieur)
Pour les attributs PHP 8+ (méthode recommandée) : les annotations ne sont pas nécessaires, Doctrine prend en charge les attributs natifs.
Démarrage rapide : exemple de code
Prenons un exemple simple : créer une entité "Product" et l'enregistrer dans la base de données.
1. Création de la classe d'entité (Entity)
<?php
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Table(name: 'products')]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Column(type: 'string', length: 255)]
private string $name;
#[ORM\Column(type: 'float')]
private float $price;
// Getters et setters
public function getId(): int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getPrice(): float
{
return $this->price;
}
public function setPrice(float $price): self
{
$this->price = $price;
return $this;
}
}
2. Création et enregistrement de l'objet
<?php
// Dans un contrôleur Symfony ou ailleurs
use App\Entity\Product;
use Doctrine\ORM\EntityManagerInterface;
class ProductController
{
public function createProduct(EntityManagerInterface $entityManager)
{
$product = new Product();
$product->setName('Ordinateur portable');
$product->setPrice(49999.99);
// On indique à Doctrine que l'objet doit être sauvegardé
$entityManager->persist($product);
// On exécute l'INSERT dans la base de données
$entityManager->flush();
// Maintenant, $product->getId() contient l'ID du nouvel enregistrement
return Aussi dans la bibliothèque
Travailler avec Excel en TypeScript : bibliothèques, exemples et outils
Travailler avec Markdown en Kotlin : bibliothèques et analyseurs
Stripe JavaScript (Node.js) : guide complet avec exemples
Redis-rs pour Rust : guide complet avec exemples
Travailler avec YAML en Swift (iOS/macOS) — bibliothèques Yams et YamlSwift