Les modèles Eloquent — manipuler les données
CRUD avec Eloquent, scopes et attributs
Concepts Théoriques
Eloquent est l'ORM (Object-Relational Mapping) de Laravel. Il transforme chaque table en une classe PHP. Au lieu d'écrire du SQL, vous manipulez des objets :
// SQL : SELECT * FROM formations WHERE is_published = 1 ORDER BY created_at DESC LIMIT 10
// Eloquent :
Formation::where('is_published', true)->latest()->limit(10)->get();Le résultat est le même — Eloquent génère le SQL en coulisses. L'avantage : le code est lisible, sécurisé (requêtes préparées automatiques), et portable (fonctionne sur MySQL, PostgreSQL, SQLite).
Un modèle = une table
Convention : le modèle Formation (singulier, PascalCase) correspond à la table formations (pluriel, snake_case). Laravel déduit automatiquement le nom de la table.
Créer un modèle
php artisan make:model FormationAvec migration, factory et seeder d'un coup :
php artisan make:model Formation -mfs$fillable — protéger les insertions en masse
Par sécurité, Eloquent interdit par défaut l'assignation de masse (mass assignment). Vous devez explicitement lister les colonnes modifiables :
class Formation extends Model
{
protected $fillable = [
'title', 'slug', 'short_description', 'description',
'category_id', 'level', 'duration', 'chapters_count',
'image_path', 'is_published', 'is_featured', 'is_free', 'order',
];
}Sans $fillable, Formation::create([...]) déclenche une erreur.
CRUD avec Eloquent
Create :
Formation::create([
'title' => 'Laravel 12',
'slug' => 'laravel-12',
'short_description' => 'Le framework PHP le plus populaire',
'category_id' => 2,
]);Read :
Formation::all(); // Toutes les formations
Formation::find(1); // Par id
Formation::where('level', 'debutant')->get(); // Avec condition
Formation::where('slug', 'laravel-12')->first(); // Premier résultat
Formation::findOrFail(99); // Exception si pas trouvé → page 404Update :
$formation = Formation::find(1);
$formation->update(['title' => 'Laravel 12 — Le guide complet']);Delete :
$formation = Formation::find(1);
$formation->delete();Scopes — des requêtes réutilisables
class Formation extends Model
{
public function scopePublished($query)
{
return $query->where('is_published', true);
}
public function scopeFeatured($query)
{
return $query->where('is_featured', true);
}
}
// Utilisation :
Formation::published()->featured()->get();
// SQL : SELECT * FROM formations WHERE is_published = 1 AND is_featured = 1Casts — convertir les types automatiquement
protected $casts = [
'is_published' => 'boolean',
'is_featured' => 'boolean',
'is_free' => 'boolean',
];Sans cast, is_published retourne "1" (string). Avec cast, il retourne true (boolean).