🚀 Laravel 12 - Cheat Sheet Migrations & Seeders

📦 Contexte

Laravel 12 • Jetstream • Livewire • Tailwind CSS


🗄️ MIGRATIONS

Commandes de base

# Exécuter toutes les migrations
php artisan migrate
 
# Exécuter les migrations avec confirmation en production
php artisan migrate --force
 
# Voir le statut des migrations
php artisan migrate:status
 
# Rollback de la dernière batch de migrations
php artisan migrate:rollback
 
# Rollback des 3 dernières batches
php artisan migrate:rollback --step=3
 
# Rollback de toutes les migrations
php artisan migrate:reset
 
# Rollback + Re-migrate (refresh)
php artisan migrate:refresh
 
# Refresh avec seed
php artisan migrate:refresh --seed
 
# Drop toutes les tables + Re-migrate
php artisan migrate:fresh
 
# Fresh avec seed (⚠️ ATTENTION: efface TOUT)
php artisan migrate:fresh --seed

Créer des migrations

# Créer une nouvelle migration
php artisan make:migration create_posts_table
 
# Créer une migration pour modifier une table
php artisan make:migration add_status_to_posts_table
 
# Créer une migration avec une table spécifique
php artisan make:migration create_posts_table --create=posts
 
# Créer une migration pour modifier une table existante
php artisan make:migration add_columns_to_posts --table=posts

Options utiles

# Exécuter dans une base de données spécifique
php artisan migrate --database=mysql
 
# Mode pretend (simuler sans exécuter)
php artisan migrate --pretend
 
# Forcer en production (sans confirmation)
php artisan migrate --force
 
# Rollback et re-migrer une seule migration
php artisan migrate:rollback --step=1
php artisan migrate

🌱 SEEDERS

Commandes de base

# Exécuter tous les seeders
php artisan db:seed
 
# Exécuter un seeder spécifique
php artisan db:seed --class=UserSeeder
 
# Exécuter les seeders avec force en production
php artisan db:seed --force

Créer des seeders

# Créer un seeder
php artisan make:seeder UserSeeder
 
# Créer un seeder pour un model spécifique
php artisan make:seeder PostSeeder

Combinaisons utiles

# Migrate + Seed en une commande
php artisan migrate --seed
 
# Fresh + Seed (développement)
php artisan migrate:fresh --seed
 
# Refresh + Seed
php artisan migrate:refresh --seed
 
# Seed une classe spécifique après migration
php artisan migrate && php artisan db:seed --class=UserSeeder

💡 WORKFLOW RECOMMANDÉ

Développement local

# Réinitialiser complètement la DB
php artisan migrate:fresh --seed
 
# Ajouter une nouvelle table
php artisan make:migration create_comments_table
php artisan migrate
 
# Modifier une table existante
php artisan make:migration add_user_id_to_comments --table=comments
php artisan migrate

Production

# Déploiement avec nouvelles migrations
php artisan migrate --force
 
# Rollback si problème
php artisan migrate:rollback --step=1
 
# Ne JAMAIS utiliser fresh/refresh en production!

🎯 CONTEXTE JETSTREAM

Tables par défaut (Jetstream)

Jetstream crée automatiquement ces migrations :

  • users - Utilisateurs avec two-factor auth
  • password_reset_tokens - Tokens de rĂ©initialisation
  • sessions - Sessions utilisateurs
  • personal_access_tokens - Tokens API
  • teams - Équipes (si activĂ©)
  • team_user - Pivot Ă©quipes/utilisateurs
  • team_invitations - Invitations d’équipe
# Migrer toutes les tables Jetstream
php artisan migrate
 
# Fresh install avec données de test
php artisan migrate:fresh --seed

Seeder exemple pour Jetstream

// database/seeders/DatabaseSeeder.php
public function run(): void
{
    // Créer un utilisateur admin
    $admin = User::factory()->create([
        'name' => 'Admin User',
        'email' => 'admin@example.com',
    ]);
 
    // Créer des utilisateurs de test
    User::factory(10)->create();
 
    // Créer une équipe pour l'admin
    if (Features::hasTeamFeatures()) {
        $admin->ownedTeams()->create([
            'name' => 'Admin Team',
            'personal_team' => true,
        ]);
    }
}

🔥 COMMANDES COMBINÉES PRATIQUES

# Reset complet + seed (développement)
php artisan migrate:fresh --seed
 
# Rollback dernière migration + re-migrer
php artisan migrate:rollback && php artisan migrate
 
# Créer migration + model + seeder + factory
php artisan make:model Post -mfs
 
# Voir SQL des migrations sans les exécuter
php artisan migrate --pretend
 
# Rollback toutes les migrations puis re-migrer
php artisan migrate:refresh

⚠️ BONNES PRATIQUES

✅ À FAIRE

  • Toujours versionner les migrations dans Git
  • Utiliser migrate:fresh --seed en dĂ©veloppement
  • Tester les rollbacks avant de dĂ©ployer
  • CrĂ©er des seeders pour les donnĂ©es de test
  • Utiliser des factories pour les donnĂ©es alĂ©atoires
  • Nommer clairement les migrations (verbe + table)

❌ À NE PAS FAIRE

  • JAMAIS utiliser fresh ou refresh en production
  • Modifier une migration dĂ©jĂ  dĂ©ployĂ©e
  • Supprimer des migrations existantes
  • Oublier de crĂ©er des index sur les foreign keys
  • Seeder des donnĂ©es sensibles en production

🛠️ DÉPANNAGE

# Problème de migration bloquée
php artisan migrate:rollback --step=1
# Corriger le fichier de migration
php artisan migrate
 
# Réinitialiser complètement (DEV uniquement!)
php artisan migrate:fresh --seed
 
# Vérifier l'état des migrations
php artisan migrate:status
 
# Voir les requêtes SQL sans les exécuter
php artisan migrate --pretend

📝 EXEMPLES DE MIGRATIONS COURANTES

Créer une table

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->string('title');
    $table->text('content');
    $table->string('status')->default('draft');
    $table->timestamps();
    $table->softDeletes();
});

Ajouter des colonnes

Schema::table('posts', function (Blueprint $table) {
    $table->string('slug')->unique()->after('title');
    $table->integer('views')->default(0);
});

Modifier des colonnes

Schema::table('posts', function (Blueprint $table) {
    $table->text('content')->nullable()->change();
});

🎨 EXEMPLE SEEDER COMPLET

<?php
 
namespace Database\Seeders;
 
use App\Models\User;
use App\Models\Post;
use Illuminate\Database\Seeder;
 
class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // Utilisateur admin
        $admin = User::factory()->create([
            'name' => 'Admin',
            'email' => 'admin@example.com',
        ]);
 
        // Utilisateurs et posts
        User::factory(10)
            ->hasPosts(5)
            ->create();
 
        // Posts pour l'admin
        Post::factory(10)->create([
            'user_id' => $admin->id,
        ]);
    }
}

🚨 COMMANDES D’URGENCE PRODUCTION

# Rollback de la dernière migration
php artisan migrate:rollback --step=1 --force
 
# Voir l'état sans rien toucher
php artisan migrate:status
 
# Rollback de plusieurs migrations
php artisan migrate:rollback --step=3 --force
 
# Re-exécuter après correction
php artisan migrate --force

💡 Astuce finale: Créez un alias dans votre terminal pour gagner du temps!

# Dans ~/.bashrc ou ~/.zshrc
alias mfs='php artisan migrate:fresh --seed'
alias migrate='php artisan migrate'
alias rollback='php artisan migrate:rollback'