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 :
- 🏗️ Créez le plan d'une station (migration
create_planets_table
) - 🚀 Déployez des modules (exécution des migrations)
- 🔧 Modernisez la construction (nouvelles migrations)
- ⏪ 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 :
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 :
- Ouvrez la base
space_api
→ Schemas → Tables - 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:fresh
— la 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 quefresh
, 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
É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
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
É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
Étape 4 : Exécutez le peuplement
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 :
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.
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
🚀 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 :
- Exécutez
php artisan tinker
- Exécutez
App\Models\Planet::all()
- Assurez-vous de voir la Terre et Mars