Laravel Eloquent Comment créer une entité

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 (Flightflights)
  • Clé primaire = id
  • Timestamps = created_at et updated_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.

Retour en haut