ORM pour PHP : comparaison de Doctrine, Eloquent et Cycle — exemples de code

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

ORM pour PHP : comparaison et exemples



ORM (Object-Relational Mapping) — c'est une couche intermédiaire entre le code PHP et une base de données relationnelle. Elle transforme les lignes des tables en objets et les requêtes SQL en méthodes. Pour PHP, il existe plusieurs solutions ORM matures. Dans cet article, nous analyserons les trois plus populaires : Doctrine, Eloquent (de Laravel) et Cycle. Vous découvrirez leur philosophie, leur syntaxe et obtiendrez des exemples de code prêts à l'emploi.



1. Doctrine ORM — Data Mapper



Doctrine — l'ORM le plus puissant et le plus mature pour PHP. Il utilise le modèle Data Mapper : les entités (Entity) ne connaissent pas la base de données, tout le travail avec la BD est effectué via les repositories et le gestionnaire d'entités EntityManager.



// Exemple d'entité dans Doctrineuse Doctrine\\ORM\\Mapping as ORM;

/** * @ORM\\Entity * @ORM\\Table(name="users") */class User{ /** @ORM\\Id @ORM\\Column(type="integer") @ORM\\GeneratedValue */ private int $id;

/** @ORM\\Column(type="string", length=100) */ private string $name;

public function getName(): string { return $this->name; }

public function setName(string $name): void { $this->name = $name; }}

// Sauvegarde et récupération$user = new User();$user->setName('Alexeï');$entityManager->persist($user);$entityManager->flush();

$users = $entityManager->getRepository(User::class)->findAll();


2. Eloquent ORM — Active Record



Eloquent — l'ORM du framework Laravel. Il utilise le modèle Active Record : chaque objet sait lui-même comment se sauvegarder dans la BD. Le code est compact et intuitif, idéal pour un développement rapide.



// Modèle Eloquentuse Illuminate\\Database\\Eloquent\\Model;

class User extends Model{ protected $table = 'users'; protected $fillable = ['name'];}

// Création d'un enregistrement$user = User::create(['name' => 'Marie']);

// Lecture$users = User::where('name', 'like', '%Ma%')->get();

foreach ($users as $user) { echo $user->name;}

// Mise à jour$user = User::find(1);$user->name = 'Olga';$user->save();


3. Cycle ORM — approche hybride



Cycle — un ORM moderne créé par les auteurs du framework Spiral. Il combine les meilleures caractéristiques de Data Mapper et d'Active Record. Il fonctionne plus rapidement que Doctrine grâce à la mise en cache du schéma et à l'absence de magie. Il prend en charge la typage strict.



// Entité Cycleuse Cycle\\Annotated\\Annotation as Cycle;

/** * @Cycle\\Entity * @Cycle\\Table(name="users") */class User{ /** @Cycle\\Column(type="primary") */ public int $id;

/** @Cycle\\Column(type="string") */ public string $name;}

// Sauvegarde$user = new User();$user->name = 'Ivan';$orm->persist($user);$orm->run();

// Recherche$users = $orm->getRepository(User::class)->select()->fetchAll();


Comparaison des ORM pour PHP



Caractéristique Doctrine Eloquent Cycle
Modèle Data Mapper Active Record Hybride
Performance Moyenne Élevée (avec cache) Élevée
Lien avec le framework Indépendant Laravel Spiral / indépendant
Génération de migrations Intégrée Via Artisan

Recommendations