Eloquent 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 qu'Eloquent ORM et pourquoi en a-t-on besoin ?

\n\n

Eloquent ORM (Object-Relational Mapping) est une bibliothèque intégrée pour travailler avec des bases de données dans le framework PHP Laravel. Elle offre une manière élégante et intuitive d'interagir avec les bases de données relationnelles (MySQL, PostgreSQL, SQLite, SQL Server) en utilisant le modèle Active Record.

\n\n

Pourquoi Eloquent est-il nécessaire ?

\n
    \n
  • Abstraction SQL : Au lieu d'écrire des requêtes SQL brutes, vous travaillez avec des objets PHP. Cela rend le code plus propre, plus lisible et plus sûr.
  • \n
  • Active Record : Chaque modèle Eloquent représente une table dans la base de données. Une instance de modèle est une ligne dans cette table. Vous pouvez lire, modifier et sauvegarder des données simplement en manipulant les propriétés de l'objet.
  • \n
  • Protection contre les injections SQL : Eloquent utilise PDO (PHP Data Objects) avec des requêtes préparées, ce qui échappe automatiquement les entrées utilisateur.
  • \n
  • Relations : Définir et utiliser facilement les liens entre les tables (un à un, un à plusieurs, plusieurs à plusieurs, etc.).
  • \n
  • Collections : Les résultats des requêtes sont retournés sous forme de collections — des objets puissants qui offrent de nombreuses méthodes utiles pour le traitement des données (map, filter, reduce, pluck, etc.).
  • \n
  • Mutateurs et Accesseurs : Permettent de transformer les données lors de la sauvegarde (mutateurs) ou de la lecture (accesseurs) depuis la base de données.
  • \n
\n\n

Eloquent n'est pas simplement une bibliothèque, c'est une partie fondamentale de l'écosystème Laravel. Comprendre Eloquent est essentiel pour un développement efficace avec ce framework.

\n\n

Installation

\n\n

Eloquent ORM s'installe automatiquement avec le framework Laravel. Si vous créez un nouveau projet Laravel, Eloquent est déjà prêt à être utilisé.

\n\n

Installation via Composer (si vous utilisez Laravel) :

\n
composer create-project laravel/laravel example-app\ncd example-app
\n\n

Installation d'Eloquent sans Laravel (Standalone) :

\n

Vous pouvez utiliser Eloquent en dehors de Laravel, par exemple dans votre propre projet. Pour cela, vous devrez installer le paquet illuminate/database et configurer la connexion à la base de données.

\n
composer require illuminate/database\ncomposer require illuminate/events // Pour travailler avec les événements de modèles (optionnel)
\n\n

Exemple de configuration de connexion (standalone) :

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Illuminate\\Database\\Capsule\\Manager as Capsule;\n\n$capsule = new Capsule;\n\n$capsule->addConnection([\n    'driver'    => 'mysql',\n    'host'      => 'localhost',\n    'database'  => 'your_database',\n    'username'  => 'your_username',\n    'password'  => 'your_password',\n    'charset'   => 'utf8',\n    'collation' => 'utf8_unicode_ci',\n    'prefix'    => '',\n]);\n\n// Configuration de l'instance globale d'Eloquent\n$capsule->setAsGlobal();\n\n// Démarrage d'Eloquent\n$capsule->bootEloquent();\n
\n\n

Démarrage rapide avec un exemple de code

\n\n

Supposons que nous ayons une table users dans la base de données. Créons un modèle Eloquent pour travailler avec elle.

\n\n

Étape 1 : Création du modèle

\n

Dans Laravel, les modèles sont généralement stockés dans app/Models. Créons un fichier User.php :

\n
<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass User extends Model\n{\n    // Eloquent liera automatiquement ce modèle à la table 'users'\n    // Le nom de la table est déterminé par le nom de la classe au pluriel (snake_case)\n    // Si la table s'appelle différemment, indiquez la propriété $table\n    // protected $table = 'my_users';\n\n    // Indiquez les champs qui peuvent être remplis en masse (pour la protection contre l'assignation massive)\n    protected $fillable = ['name', 'email', 'password'];\n}\                    

Recommendations