Qu’est-ce qu’une migration
Une migration s’apparente à un système de contrôle de version pour la base de données. Elle permet à une équipe de partager et gérer le schéma de la base. Vous avez sans doute déjà connu la situation où, après unpull du code, il faut demander à ses collègues d’« ajouter manuellement une colonne à leur base locale ».
Les migrations résolvent ce problème.
Les fichiers de migration sont stockés dans database/migrations.
Chaque nom de fichier contient un horodatage qui détermine l’ordre d’exécution.
Créer un fichier de migration
Utilisez la commande Artisanmake:migration.
create_posts_table produit un stub pour créer la table posts.
Structure d’une migration
Une classe de migration possède deux méthodes :up et down.
up: ajoute les tables, colonnes et index à la base.down: annule les opérations deup. Appelée lors du rollback.
Méthodes de définition de colonne
Blueprint propose de nombreux types de colonnes.
| Méthode | Description |
|---|---|
$table->id() | Clé primaire auto-incrémentée (alias de bigIncrements('id')) |
$table->string('name') | Équivalent VARCHAR (255 par défaut) |
$table->text('body') | Colonne TEXT |
$table->integer('count') | Colonne INTEGER |
$table->boolean('active') | Booléen (TINYINT) |
$table->timestamp('published_at') | Colonne TIMESTAMP |
$table->timestamps() | Ajoute created_at et updated_at |
$table->softDeletes() | Ajoute deleted_at pour la suppression logique |
$table->foreignId('user_id') | Colonne BIGINT UNSIGNED pour clé étrangère |
Modificateurs de colonne
Utilisez les méthodes chaînées pour ajouter des modificateurs.Exécuter les migrations
migrate exécute toutes les migrations en attente.
migrate:status liste les migrations exécutées et celles en attente.
Rollback
migrate:rollback annule le dernier lot de migrations.
--step limite le nombre de migrations à annuler.
migrate:refresh annule toutes les migrations puis les réexécute.
migrate:refresh recrée toutes les tables et supprime les données. Pratique pour réinitialiser la base en développement.Exemple : création de la table posts
Voyons la création d’une tableposts pour gérer des articles de blog.
1. Génération de la migration
2. Édition de la migration
Ouvrezdatabase/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php.
3. Exécution
posts est créée.
4. Ajouter une colonne après coup
Pour ajouter une colonne à une table existante, créez une nouvelle migration sans modifier l’existante.Événements de migration
Chaque opération de migration déclenche un événement. Tous héritent deIlluminate\Database\Events\MigrationEvent.
| Classe | Description |
|---|---|
Illuminate\Database\Events\DatabaseRefreshed | Après migrate:refresh |
Illuminate\Database\Events\MigrationsStarted | Juste avant l’exécution du lot |
Illuminate\Database\Events\MigrationsEnded | Après l’exécution du lot |
Illuminate\Database\Events\MigrationStarted | Juste avant chaque migration |
Illuminate\Database\Events\MigrationEnded | Après chaque migration |
Illuminate\Database\Events\NoPendingMigrations | Aucun changement à exécuter |
Illuminate\Database\Events\SchemaDumped | Après un dump du schéma |
Illuminate\Database\Events\SchemaLoaded | Après le chargement d’un dump |
MigrationsEnded pour vider le cache à la fin :
Prochaines étapes
Seeding de base de données
Alimentez les tables créées par vos migrations avec des données d’exemple.
Introduction à Eloquent
Manipulez les tables issues des migrations avec l’ORM Eloquent.