🚀 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 --seedCré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=postsOptions 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 --forceCré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 PostSeederCombinaisons 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 migrateProduction
# 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 authpassword_reset_tokens- Tokens de réinitialisationsessions- Sessions utilisateurspersonal_access_tokens- Tokens APIteams- Équipes (si activé)team_user- Pivot équipes/utilisateursteam_invitations- Invitations d’équipe
# Migrer toutes les tables Jetstream
php artisan migrate
# Fresh install avec données de test
php artisan migrate:fresh --seedSeeder 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 --seeden 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
freshourefreshen 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'