Skip to main content

¿Qué son las migraciones?

Las migraciones son como un sistema de control de versiones para la base de datos. Permiten que un equipo comparta y gestione la definición del esquema de la aplicación. Seguramente hayas vivido la situación de tener que decir a otro miembro del equipo: “Añade manualmente esta columna a tu base de datos local tras hacer pull”. Las migraciones resuelven ese problema. Los archivos de migración se guardan en el directorio database/migrations. Cada nombre de archivo incluye una marca de tiempo que Laravel usa para determinar el orden de ejecución.

Creación de un archivo de migración

Crea un nuevo archivo de migración con el comando Artisan make:migration.
A partir del nombre, Laravel deduce el nombre de la tabla y genera el stub adecuado. Con create_posts_table te crea de partida el código para crear la tabla posts.

Estructura de una migración

Una clase de migración tiene dos métodos: up y down.
  • up: añade tablas, columnas o índices a la base de datos.
  • down: revierte lo que hace up. Se llama al hacer rollback.

Principales métodos para definir columnas

La clase Blueprint ofrece muchos tipos de columna.

Modificadores de columna

Puedes encadenar modificadores en la definición de la columna.

Columnas e índices vectoriales

El método vector crea una columna vector para almacenar vectores de embedding. Indica en dimensions la dimensión de salida del proveedor de embeddings que utilices.
Las columnas vectoriales están disponibles en conexiones PostgreSQL que utilicen la extensión pgvector y en MariaDB 11.7 o superior. En PostgreSQL, habilita pgvector antes de crear una columna vectorial.
Para acelerar las búsquedas por similitud vectorial, añade un index a la columna vector. Este índice usa la distancia coseno.
Para eliminar un índice vectorial existente, usa dropVectorIndex.

Creación de índices en línea

Al crear un índice sobre una tabla grande, normalmente la tabla queda bloqueada mientras se construye el índice y las lecturas y escrituras deben esperar. En MySQL, si añades el modificador inplace a la definición de un índice o una clave foránea, la operación se ejecuta con el algoritmo INPLACE.
Combina inplace con el modificador lock para controlar el bloqueo de tabla durante la operación. Con none, las lecturas y escrituras siguen disponibles en las operaciones que MySQL lo permita.
Esta funcionalidad es exclusiva de MySQL. Consulta la documentación de operaciones DDL online de MySQL para confirmar que la operación que ejecutas soporta el algoritmo INPLACE y el modo de bloqueo indicado. Para usar inplace en operaciones de clave foránea, desactiva antes las comprobaciones de claves foráneas.

Ejecución de migraciones

Con migrate ejecutas todas las migraciones pendientes.
Para ver el estado de las ejecutadas y pendientes, usa migrate:status.
En producción, al ejecutar migraciones aparece un prompt de confirmación. Para ejecutarlo sin confirmación usa --force, pero ten precaución porque algunas operaciones destruyen datos.

Rollback

Para deshacer el último lote de migraciones, usa migrate:rollback.
Para revertir un número concreto de pasos, usa la opción --step.
Para revertir todas las migraciones y volver a ejecutarlas, usa migrate:refresh.
migrate:refresh recrea todas las tablas, así que los datos existentes se pierden. Es útil para reiniciar la base de datos durante el desarrollo.

Ejemplo práctico: crear la tabla posts

Repasemos el flujo completo con una tabla posts para gestionar publicaciones de blog.

1. Generar el archivo de migración

2. Editar la migración

Abre y edita database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php.

3. Ejecutar la migración

Después de ejecutarla, la tabla posts se creará en la base de datos.

4. Añadir columnas más tarde

Para añadir nuevas columnas a una tabla existente, no edites la migración original: crea una nueva.
Evita editar directamente archivos de migración ya ejecutados. Rompes la coherencia con el resto del equipo o con producción. Los cambios se añaden siempre como nuevas migraciones.

Eventos de migración

Cada operación de migración dispara eventos. Todos ellos extienden Illuminate\Database\Events\MigrationEvent. Por ejemplo, puedes escuchar el evento MigrationsEnded para limpiar la caché tras completar las migraciones.

Próximos pasos

Seeding de base de datos

Aprende a insertar datos de muestra en las tablas creadas mediante migraciones.

Introducción a Eloquent

Aprende a manipular con Eloquent ORM las tablas creadas por las migraciones.
Última modificación el 22 de septiembre de 2026