L'ORM Eloquent transforme chaque table de votre base de données en une classe PHP vivante et expressive. Manipulez vos enregistrements comme de véritables objets métier, sans écrire une seule requête SQL complexe à la main.
Une classe Product cible automatiquement la table plurielle products, avec id en clé primaire.
La propriété $fillable filtre strictement les colonnes autorisées lors d'un create() ou update().
Méthode casts(): array pour convertir instantanément les colonnes en types PHP : boolean, decimal:2, hashed.
Calculez des attributs virtuels à la volée (ex: prix_ttc) et réutilisez vos filtres fréquents avec scopeActive().
// Astuce Artisan : Créez le Modèle + Migration + Factory + Seeder en une seule commande !
// php artisan make:model Product -mfs
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentCastsAttribute;
use IlluminateDatabaseEloquentRelationsBelongsTo;
use IlluminateDatabaseEloquentBuilder;
class Product extends Model
{
use HasFactory;
// 1. Protection Mass Assignment : Seules ces colonnes peuvent être injectées
protected $fillable = [
'name',
'slug',
'description',
'price',
'stock',
'is_active',
'category_id',
];
// 2. Casts Typés Modernes (Méthode officielle Laravel 11 & PHP 8.2)
protected function casts(): array
{
return [
'is_active' => 'boolean',
'price' => 'decimal:2',
'stock' => 'integer',
'created_at' => 'datetime',
];
}
// 3. Accessor Moderne : Attribut virtuel calculé $product->formatted_price
protected function formattedPrice(): Attribute
{
return Attribute::make(
get: fn () => number_format((float) $this->price, 2, ',', ' ') . ' €'
);
}
// 4. Relation Eloquent : Un produit appartient à une catégorie
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
// 5. Local Scope : Réutilisable dans les requêtes -> Product::active()->get()
public function scopeActive(Builder $query): Builder
{
return $query->where('is_active', true)->where('stock', '>', 0);
}
};Modifiez les données brutes SQL (chaînes de caractères non typées) pour voir comment le Modèle Eloquent les convertit automatiquement en propriétés PHP typées et calcule les attributs virtuels.
// Résultat SQL brut avant hydratation Eloquent :
[
"id" => "42",
"name" => "MacBook Pro M3",
"price" => "1499.99", // Type: string
"stock" => "8", // Type: string
"is_active" => "1" // Type: string ("1" ou "0")
] Le Mass Assignment survient quand un utilisateur soumet via formulaire un champ inattendu (par exemple is_admin = true ou balance = 9999).
En déclarant expressément la liste blanche protected $fillable = ['name', 'price', ...], Eloquent ignore silencieusement tout champ non autorisé lors de Model::create($request->all()).
Gagnez un temps précieux lors de la conception de vos entités grâce aux drapeaux de la commande make:model :
-m génère la migration, -f crée la factory correspondante, et -s génère le seeder de test en un instant !