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 |
Aussi dans la bibliothèque
Bibliothèque GraphQL pour Go (Golang) — guide complet
Jetons JWT en Java : Guide complet pour travailler avec les JSON Web Tokens
Doctrine ORM pour PHP : guide complet avec exemples
libcurl pour C++ : guide complet avec exemples
Apprentissage automatique en PHP : aperçu des bibliothèques pour l'intégration du ML
Recommendations
Travail avec les dates en Swift (iOS/macOS) : bibliothèques et frameworks
Traitement d'images : redimensionnement et recadrage en C++ avec OpenCV Travailler avec les dates en TypeScript : aperçu des bibliothèques date-fns, Luxon et Day.js
JsonWebToken JavaScript (Node.js) : guide complet avec exemples |