Chapitre 2.2 : Création du modèle Planet
Temps d'étude : 45 minutes
1. Le modèle dans Laravel : Plan d'un objet cosmique
Dans l'architecture MVC (Model-View-Controller), le modèle est :
- 📦 Un conteneur pour les données (paramètres des planètes)
- 🔌 Une interface de travail avec la base de données
- 🛡️ Le centre de la logique métier de l'application
💡 Analogie spatiale : Le modèle
Planet
= Le plan d'une planète dans l'ordinateur du centre de contrôle. Avec lui, on peut :
- Créer une nouvelle planète dans le catalogue (
INSERT
)- Obtenir des données sur Mars (
SELECT
)- Mettre à jour les informations sur l'atmosphère (
UPDATE
)
2. Création du modèle et de la migration
Laravel utilise Artisan CLI — votre "télécommande" de projet.
Étape 1 : Génération du modèle avec migration
Ce qui a été créé :
app/
└── Models/
└── Planet.php ← Modèle
database/
└── migrations/
└── 2025_08_04_000000_create_planets_table.php ← Migration
Options Artisan :
-m
→ Créer une migration-c
→ Créer un contrôleur-r
→ Contrôleur de ressources
💡 Conseil de pro : Ces options peuvent être combinées pour une efficacité maximale. La commande
php artisan make:model Planet -mcr
créera instantanément un modèle, une migration et un contrôleur de ressources pour gérer ce modèle. Cela fait gagner beaucoup de temps.
3. Configuration du modèle Planet
Ouvrez app/Models/Planet.php
:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Planet extends Model
{
// Nom de la table (par défaut : 'planets')
// Laravel suppose automatiquement que le nom de la table est la forme plurielle du nom du modèle en snake_case (Planet -> planets).
// Par conséquent, cette propriété n'est pas obligatoire ici, mais utile pour la clarté.
protected $table = 'planets';
// Champs autorisés pour l'assignation massive
protected $fillable = [
'name',
'description',
'size_km',
'solar_system',
'image_url'
];
// Types de données pour la conversion automatique
protected $casts = [
'size_km' => 'integer'
];
}
Explication des propriétés :
Propriété | Valeur | Exemple de données |
---|---|---|
$table |
Nom de la table dans la BDD | planets |
$fillable |
Champs pour l'assignation massive | name , size_km |
$casts |
Conversion automatique des types | size_km: integer |
4. Conception de la table des planètes
Avant d'éditer la migration, définissons la structure d'une "planète" :
Champ | Type de données | Description | Exemple de valeur |
---|---|---|---|
id |
BIGINT (PK) | ID unique | 1 |
name |
VARCHAR(255) | Nom de la planète | "Mars" |
description |
TEXT | Description | "Planète rouge..." |
size_km |
INTEGER | Diamètre en km | 6779 |
solar_system |
VARCHAR(100) | Système solaire | "Système solaire" |
image_url |
VARCHAR(2048) | URL de la photo (peut être null) | "https://..." |
created_at |
TIMESTAMP | Date de création | 2025-08-04 12:00:00 |
updated_at |
TIMESTAMP | Date de mise à jour | 2025-08-05 09:30:00 |
5. Édition de la migration
Ouvrez le fichier de migration dans database/migrations/..._create_planets_table.php
:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePlanetsTable extends Migration
{
public function up()
{
Schema::create('planets', function (Blueprint $table) {
$table->id(); // BIGINT auto-incrément
$table->string('name')->unique();
$table->text('description');
$table->integer('size_km');
$table->string('solar_system', 100);
$table->string('image_url', 2048)->nullable();
$table->timestamps(); // created_at + updated_at
});
}
public function down()
{
Schema::dropIfExists('planets');
}
}
Points clés :
->unique()
→ Garantit l'unicité des noms->nullable()
→ Le champ peut être videtimestamps()
→ Gestion automatique des dates
6. Exécution de la migration (préliminaire)
Bien que l'exécution se fasse au chapitre 2.3, voyons à quoi cela ressemblera :
Sortie attendue :
Migrating: 2025_08_04_000000_create_planets_table
Migrated: 2025_08_04_000000_create_planets_table (32.15ms)
Vérification dans pgAdmin 4 :
- Ouvrez la base de données
space_api
→ Schemas → Tables - La table
planets
avec vos champs devrait apparaître
7. Approche alternative : Générateurs de code
Pour accélérer le développement, vous pouvez utiliser des packages :
- Laravel Blueprint - crée des modèles/migrations à partir d'une description YAML
- InfyOm Laravel Generator - générateur basé sur le schéma de la BDD
Exemple Blueprint :
models:
Planet:
name: string:255
description: text
size_km: integer
solar_system: string:100
image_url: string:2048? # Le signe '?' signifie que le champ est nullable
Quiz de révision
🚀 Résumé du chapitre : Vous avez créé le "jumeau numérique" d'une planète ! Désormais, votre projet contient :
- 🪐 Le modèle
Planet
avec sa logique métier - 📊 Une migration pour la table
planets
dans PostgreSQL - 🛠️ Des propriétés de modèle configurées (
fillable
,casts
)
Préparez la base de données ! Dans le chapitre suivant, nous exécuterons la migration et peuplerons l'univers avec les premières planètes.
📌 Vérification :
Assurez-vous que les fichiers
Planet.php
et..._create_planets_table.php
sont créés dans les bons répertoires.⚠️ Si Artisan se plaint :
- Vérifiez que vous êtes dans le dossier du projet
- Assurez-vous que les dépendances sont installées (
composer install
)- Pour Windows : ajoutez PHP et Composer au PATH