Skip to main content

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 un pull 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 Artisan make:migration.
Laravel déduit le nom de la table à partir du nom de la migration et génère un stub adapté. 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 de up. Appelée lors du rollback.

Méthodes de définition de colonne

Blueprint propose de nombreux types de colonnes.

Modificateurs de colonne

Utilisez les méthodes chaînées pour ajouter des modificateurs.

Colonnes et index vectoriels

La méthode vector crée une colonne vector pour stocker des vecteurs d’embedding. Renseigne dans dimensions la dimension de sortie du fournisseur d’embedding que tu utilises.
Les colonnes vectorielles sont disponibles sur les connexions PostgreSQL utilisant l’extension pgvector et sur MariaDB 11.7 ou version ultérieure. Sur PostgreSQL, active pgvector avant de créer une colonne vectorielle.
Pour accélérer les recherches par similarité vectorielle, ajoute un index à la colonne vector. Cet index utilise la distance cosinus.
Pour supprimer un index vectoriel existant, utilise dropVectorIndex.

Création d’index en ligne

Lorsque vous créez un index sur une grande table, la table est habituellement verrouillée pendant la construction de l’index, ce qui fait attendre les lectures et les écritures. Sur MySQL, ajoutez le modificateur inplace à la définition d’un index ou d’une clé étrangère pour exécuter l’opération avec l’algorithme INPLACE.
Combinez inplace avec le modificateur lock pour contrôler le verrou de table pendant l’opération. Avec none, les lectures et les écritures restent disponibles pour les opérations que MySQL autorise.
Cette fonctionnalité est spécifique à MySQL. Consultez la documentation des opérations DDL en ligne de MySQL pour vérifier que l’opération que vous exécutez prend en charge l’algorithme INPLACE et le mode de verrou indiqué. Pour utiliser inplace sur des opérations de clé étrangère, désactivez au préalable les contraintes de clé étrangère.

Exécuter les migrations

migrate exécute toutes les migrations en attente.
migrate:status liste les migrations exécutées et celles en attente.
En production, une invite de confirmation apparaît. Pour l’ignorer, utilisez --force, mais soyez prudent car certaines opérations peuvent effacer des données.

Rollback

migrate:rollback annule le dernier lot de migrations.
L’option --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 table posts pour gérer des articles de blog.

1. Génération de la migration

2. Édition de la migration

Ouvrez database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php.

3. Exécution

La table 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.
N’éditez pas directement des migrations déjà exécutées. Cela crée des incohérences avec les autres environnements ou la production. Ajoutez toujours vos changements dans une nouvelle migration.

Événements de migration

Chaque opération de migration déclenche un événement. Tous héritent de Illuminate\Database\Events\MigrationEvent. Par exemple, écoutez 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.
Dernière modification le 22 septembre 2026