Les migrations permettent de concevoir et faire évoluer la structure de votre base de données en code PHP pur, versionné avec Git. Fini les exports de fichiers .sql manuels entre développeurs !
Syntaxe moderne return new class extends Migration. Élimine tout risque de collision de noms de classe PHP.
Types de données fluides et agnostiques du SGBD : id(), string(), decimal(), timestamps().
Une seule ligne expressive : $table->foreignId('category_id')->constrained()->cascadeOnDelete();
Appliquez avec migrate, annulez avec rollback ou réinitialisez tout avec migrate:fresh.
// Générer la migration en terminal :
// php artisan make:migration create_products_table
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
// Migration anonyme moderne (Laravel 10 & 11)
return new class extends Migration
{
/**
* Exécute les migrations (Création ou modification de table).
*/
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id(); // BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
$table->string('name', 150); // VARCHAR(150)
$table->string('slug')->unique(); // Index unique pour URLs propres
$table->text('description')->nullable(); // TEXT autorisant NULL
$table->decimal('price', 10, 2); // 10 chiffres au total, 2 décimales (ex: 99.99)
$table->integer('stock')->default(0); // Entier avec valeur par défaut
$table->boolean('is_active')->default(true); // TINYINT(1) booléen
// Clé étrangère moderne (remplace les anciennes syntaxes verbeuses de Laravel 6/7)
// Lie automatiquement vers la table 'categories' et la colonne 'id'
$table->foreignId('category_id')
->constrained()
->cascadeOnDelete();
$table->timestamps(); // Colonnes 'created_at' et 'updated_at'
});
}
/**
* Annule la migration (Rollback).
*/
public function down(): void
{
Schema::dropIfExists('products');
}
};Testez en direct les différentes commandes Artisan de migration et visualisez l'impact instantané sur l'état des tables créées dans la base de données.
| Méthode Schema Builder | Type SQL Équivalent | Description & Cas d'Usage |
|---|---|---|
$table->id() | BIGINT UNSIGNED AUTO_INCREMENT | Clé primaire standard ultra-performante pour toutes vos tables. |
$table->string('titre', 100) | VARCHAR(100) | Textes courts : nom, titre, email, mot de passe hashé. |
$table->text('contenu') | TEXT / LONGTEXT | Textes longs : corps d'article, description détaillée, avis. |
$table->decimal('prix', 10, 2) | DECIMAL(10, 2) | Montants financiers et prix précis sans erreurs d'arrondi à virgule flottante. |
$table->foreignId('user_id')->constrained() | BIGINT UNSIGNED + FOREIGN KEY | Clé étrangère moderne liée automatiquement à la table users.id. |
->nullable()->default(...) | Modificateurs | Autorise la valeur NULL ou définit une valeur par défaut. |