Skip to content

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

php artisan make:model Planet -m

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 vide
  • timestamps() → 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 :

php artisan migrate

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 :

  1. Ouvrez la base de données space_api → Schemas → Tables
  2. 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

1. Commande Artisan pour créer un modèle et la migration associée :

2. La propriété `$fillable` dans le modèle est utilisée pour

3. nullable() dans une migration signifie :

4. Type de champ pour une longue description de la planète :

5. La méthode `timestamps()` crée :


🚀 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