Skip to content

Chapitre 2.3 : Migrations de base de données

Temps d'étude : 50 minutes


1. Migrations : Construction d'une station spatiale

Les migrations dans Laravel sont un système de contrôle de version pour votre base de données.

Imaginez que vous :

  1. 🏗️ Créez le plan d'une station (migration create_planets_table)
  2. 🚀 Déployez des modules (exécution des migrations)
  3. 🔧 Modernisez la construction (nouvelles migrations)
  4. ⏪ Pouvez revenir à une version précédente (rollback)

💡 Important : Les migrations permettent à l'équipe de travailler de manière cohérente — comme des ingénieurs sur différents continents construisant l'ISS !


2. Exécution des migrations

Après avoir créé la migration au chapitre 2.2, exécutez :

php artisan migrate

Sortie dans le terminal :

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (25.12ms)
Migrating: 2014_10_12_100000_create_password_reset_tokens_table
Migrated:  2014_10_12_100000_create_password_reset_tokens_table (18.07ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (21.33ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (30.45ms)
Migrating: 2025_08_04_000000_create_planets_table
Migrated:  2025_08_04_000000_create_planets_table (15.67ms)  # Votre table !

Vérification dans pgAdmin 4 :

  1. Ouvrez la base space_api → Schemas → Tables
  2. Assurez-vous que les éléments suivants sont apparus : - planets - users - password_reset_tokens

3. Annulation des migrations : Retour d'urgence

Si vous devez corriger la structure :

php artisan migrate:rollback  # Annule le dernier lot de migrations
php artisan migrate:reset    # Annule toutes les migrations

  • php artisan migrate:freshla commande la plus utile en développement ! Elle supprime toutes les tables et exécute à nouveau toutes les migrations.
  • php artisan migrate:fresh --seed — fait la même chose que fresh, mais exécute immédiatement les seeders après les migrations. C'est la commande pour "recréer" complètement la base de données à partir de zéro.

Scénario d'utilisation :

# Étape 1 : Vous avez réalisé qu'il y a une erreur dans la migration. Recréez entièrement la base.
php artisan migrate:fresh
# Étape 2 : Modifiez la migration
# Étape 3 : Recréez à nouveau la base avec la migration corrigée
php artisan migrate:fresh


4. Ajout de nouveaux champs : Modernisation de la station

Exemple : Ajoutons le champ is_habitable (la planète est-elle habitable).

Étape 1 : Créez une nouvelle migration

php artisan make:migration add_is_habitable_to_planets_table

Étape 2 : Modifiez le fichier database/migrations/..._add_is_habitable_to_planets_table.php

<?php
public function up()
{
    Schema::table('planets', function (Blueprint $table) {
        $table->boolean('is_habitable')
              ->default(false);
    });
}

public function down()
{
    Schema::table('planets', function (Blueprint $table) {
        $table->dropColumn('is_habitable');
    });
}

Étape 3 : Exécutez la mise à jour

php artisan migrate


5. Peuplement de la base : Premières planètes

Nous créons un seeder — un script pour générer des données de test.

Étape 1 : Génération du seeder

php artisan make:seeder PlanetSeeder

Étape 2 : Modifiez database/seeders/PlanetSeeder.php

<?php
use App\Models\Planet; // Importez le modèle Planet - Sans cela, vous obtiendrez une erreur !


class PlanetSeeder extends Seeder
{
    public function run()
    {
        Planet::create([
            'name' => 'Terre',
            'description' => 'Planète bleue avec une vie diversifiée',
            'size_km' => 12742,
            'solar_system' => 'Système solaire',
            'image_url' => 'https://example.com/earth.jpg',
            'is_habitable' => true
        ]);

        Planet::create([
            'name' => 'Mars',
            'description' => 'Planète rouge, cible des futures colonisations',
            'size_km' => 6779,
            'solar_system' => 'Système solaire',
            'is_habitable' => false
        ]);
    }
}

Étape 3 : Enregistrez le seeder dans database/seeders/DatabaseSeeder.php

<?php
public function run()
{
    $this->call([
        PlanetSeeder::class
    ]);
}

Étape 4 : Exécutez le peuplement

php artisan db:seed


6. Travailler avec PostgreSQL : Spécificités

Spécificités des types de données :

Capacité PostgreSQL MySQL Commentaire Laravel
Type booléen boolean (vrai true/false) tinyint(1) (stocke 0/1) $table->boolean('...') fonctionne pour les deux
JSON jsonb (binaire, indexable) json (textuel) $table->jsonb('...') - très puissant en PG
Tableaux text[], integer[] (tableaux natifs) Non (émulé via JSON ou chaînes de caractères) $table->array('...') (exclusif à PG)
Ordre des colonnes Ne peut pas être contrôlé (after() ne fonctionne pas) Peut être contrôlé (after()) Laravel l'abstrait, mais il faut connaître la limitation

Exemple de création d'index :

// Dans la migration
$table->index('solar_system');


7. Vérification des données dans psql

Vous pouvez utiliser n'importe quel client graphique et y sélectionner space_api pour la visualisation.

Lors de l'utilisation de la console :

psql -U postgres -d space_api
# Le terminal peut vous demander le mot de passe que vous avez défini lors de l'installation de PostgreSQL.
SELECT * FROM planets;

Dans tous les cas, la sortie devrait être la suivante :

id name description size_km solar_system image_url is_habitable
1 Terre Planète bleue avec une vie diversifiée 12742 Système solaire ... true
2 Mars Planète rouge, cible des colonisations 6779 Système solaire null false

Quiz pour la révision

1. Commande pour exécuter les migrations :

2. Comment annuler la dernière migration ?

3. Les seeders sont utilisés pour :

4. Méthode pour ajouter une colonne à une table existante :

5. Où les seeders sont-ils enregistrés ?


🚀 Résumé du chapitre :

Vous avez maîtrisé la "construction d'infrastructures spatiales" :

  • ✅ Créé et exécuté des migrations
  • 🔧 Modernisé la structure de la table
  • 🌍 Peuplé la BDD avec les premières planètes
  • ⚙️ Appris à travailler avec PostgreSQL

Votre univers a acquis ses premiers mondes ! Vous pouvez maintenant passer à la création d'interfaces API pour gérer les planètes.

📌 Vérification :

  1. Exécutez php artisan tinker
  2. Exécutez App\Models\Planet::all()
  3. Assurez-vous de voir la Terre et Mars