Doctrine ORM pour PHP : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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                    

Recommendations