Contenu
Exploiter Eloquent l’ORM de Laravel
Lorsque vous travaillez avec Laravel, Eloquent est l’ORM (Object Relational Mapping) qui vous permet d’interagir avec votre base de données en utilisant des objets PHP plutôt que du SQL brut. Chaque table de base de données correspond généralement à une entité Eloquent, appelée aussi Model dans Laravel.
php artisan make:model Flight #créer une migration dans la foulée php artisan make:model Flight --migration (ou -m)
Dans Eloquent, l’entité que vous avez créé peut être vide ! et quand même fonctionner !
Nous allons cependant voir comment on peut customiser cette classe afin d’avoir un fonctionnement plus custom.
Créer une migration en même temps
Dans la majorité des cas, lorsque vous créez un modèle, vous aurez aussi besoin de créer la table correspondante en base de données. Laravel permet de faire les deux en une seule commande :
php artisan make:model Flight --migration # ou version courte php artisan make:model Flight -m
Cette commande va générer :
- Le modèle dans
app/Models/Flight.php - Une migration dans
database/migrations/
Vous pouvez ensuite modifier la migration pour définir la structure de votre table :
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('number');
$table->string('destination');
$table->timestamps();
});
puis lancer
php artisan migrate
Je disais : une entité Eloquent peut être vide
Dans Eloquent, l’entité que vous avez créée peut être complètement vide et fonctionner quand même.
Exemple
class Flight extends Model
{
}
Pourquoi ?
Parce que Laravel applique des conventions automatiques :
- Nom de table = pluriel du modèle (
Flight→flights) - Clé primaire =
id - Timestamps =
created_atetupdated_at
Cela permet d’aller très vite pour les projets simples.
Customiser le nom de la table
Si votre table ne respecte pas les conventions Laravel, vous pouvez la définir manuellement :
class Flight extends Model
{
protected $table = 'air_flights';
}
Définir les champs autorisés (Mass Assignment)
Laravel protège vos données avec le Mass Assignment Protection.
Vous devez définir les champs autorisés :
class Flight extends Model
{
protected $fillable = [
'number',
'destination'
];
}
// ou l'inverse
protected $guarded = ['id'];
Désactiver les timestamps
Si votre table ne contient pas created_at et updated_at :
class Flight extends Model
{
public $timestamps = false;
}
Ajouter des Casts
Les casts permettent de convertir automatiquement les types :
class Flight extends Model
{
protected $casts = [
'is_delayed' => 'boolean',
'departure_at' => 'datetime'
];
}
Ajouter des méthodes métier
Un modèle Eloquent peut contenir votre logique métier :
class Flight extends Model
{
public function isLate()
{
return $this->is_delayed === true;
}
}
Créer une entité avec Laravel Eloquent est extrêmement rapide grâce aux conventions par défaut. Cependant, la vraie puissance d’Eloquent apparaît lorsque vous commencez à personnaliser vos modèles : sécurité des données, typage automatique, logique métier et adaptation à votre base existante.
Maîtriser les entités Eloquent est une étape essentielle pour construire des applications Laravel propres, maintenables et performantes.
Différence avec Symfony (Doctrine)
Contrairement à Laravel qui utilise Eloquent (Active Record), Symfony utilise généralement Doctrine (Data Mapper). Avec Eloquent, le modèle contient à la fois la structure et la logique d’accès aux données. Avec Doctrine, les entités sont souvent plus “pures”, et la logique base de données passe par des repositories. Eloquent est souvent plus rapide à prendre en main, tandis que Doctrine offre une séparation plus stricte entre logique métier et persistance.