¿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 directoriodatabase/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 Artisanmake:migration.
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 haceup. Se llama al hacer rollback.
Principales métodos para definir columnas
La claseBlueprint ofrece muchos tipos de columna.
| Método | Descripción |
|---|---|
$table->id() | Clave primaria auto-incremental (alias de bigIncrements('id')) |
$table->string('name') | Columna equivalente a VARCHAR (255 por defecto) |
$table->text('body') | Columna TEXT |
$table->integer('count') | Columna INTEGER |
$table->boolean('active') | Guarda booleano como TINYINT |
$table->timestamp('published_at') | Columna TIMESTAMP |
$table->timestamps() | Añade created_at y updated_at juntos |
$table->softDeletes() | Añade la columna deleted_at para soft delete |
$table->foreignId('user_id') | Columna BIGINT UNSIGNED para clave foránea |
Modificadores de columna
Puedes encadenar modificadores en la definición de la columna.Ejecución de migraciones
Conmigrate ejecutas todas las migraciones pendientes.
migrate:status.
Rollback
Para deshacer el último lote de migraciones, usamigrate:rollback.
--step.
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 tablaposts para gestionar publicaciones de blog.
1. Generar el archivo de migración
2. Editar la migración
Abre y editadatabase/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php.
3. Ejecutar la migración
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.Eventos de migración
Cada operación de migración dispara eventos. Todos ellos extiendenIlluminate\Database\Events\MigrationEvent.
| Clase | Descripción |
|---|---|
Illuminate\Database\Events\DatabaseRefreshed | Al completarse el comando migrate:refresh |
Illuminate\Database\Events\MigrationsStarted | Justo antes de ejecutarse un lote de migraciones |
Illuminate\Database\Events\MigrationsEnded | Al completarse el lote de migraciones |
Illuminate\Database\Events\MigrationStarted | Justo antes de ejecutarse una única migración |
Illuminate\Database\Events\MigrationEnded | Al completarse una única migración |
Illuminate\Database\Events\NoPendingMigrations | Cuando el comando detecta que no hay migraciones pendientes |
Illuminate\Database\Events\SchemaDumped | Al completarse el volcado del esquema |
Illuminate\Database\Events\SchemaLoaded | Al cargarse un volcado de esquema existente |
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.