Migrate:Fresh vs. Migrate:Refresh en Laravel
Descubre las diferencias clave entre migrate:fresh (rápido y limpio) y migrate:refresh (rollback seguro) en Laravel. Acelera tu flujo de trabajo de desarrollo de BBDD.
INDICE
- 1. ¿Por Qué Entender el Rollback es fundamental en Laravel?
- 2. Escenario Práctico: Comparación con Ejemplos en un Proyecto Real
- 3. Ejemplo 1: Usando migrate:refresh – Ideal para Ciclos Controlados
- 4. Ejemplo 2: Usando migrate:fresh – El Reset Radical Sin Rollback
- 5. Tabla Comparativa: Migrate:Fresh vs. Migrate:Refresh en Laravel 12
¡Hola, desarrolladores Laravel! Si estás inmerso en el mundo de las migraciones en Laravel 12, esta guía es para ti. En nuestra publicación anterior sobre migraciones, cubrimos lo esencial, pero ¿olvidamos un comando clave? Hoy profundizamos en la diferencia entre migrate:fresh y migrate:refresh en Laravel 12 (lanzado el 24 de febrero de 2025). Ambos incluyen un php artisan migrate implícito para recrear tu base de datos, pero el rollback marca la diferencia: uno lo ejecuta y el otro no.
Esta comparación práctica te ayudará a evitar errores comunes como "Migration file not found". Incluimos ejemplos reales con código y salidas de consola, actualizados para Laravel 12 (compatible con PHP 8.2-8.4). Perfecto para desarrollo PHP moderno, testing de bases de datos y proyectos full-stack. Si buscas optimización de migraciones Laravel, ¡sigue leyendo!
¿Por Qué Entender el Rollback es fundamental en Laravel?
¿Por Qué Entender el Rollback es fundamental en Laravel?
En Laravel 12, los comandos de rollback como migrate:rollback, migrate:refresh y migrate:reset siguen dependiendo de la tabla migrations en tu base de datos. Esta tabla registra el historial de migraciones (nombres, lotes y orden), permitiendo reversiones precisas.
Fundamentos del Rollback en Migraciones:
- Mecanismo: Laravel consulta migrations para identificar qué revertir. Si eliminas archivos de database/migrations manualmente, no se borran del registro → ¡Errores al buscar "migraciones fantasma"!
- Orden de Ejecución: Siempre inverso (del más reciente al antiguo). Ejemplo: Si tienes migraciones para "huéspedes" → "URLs" → "checkins" → "administración", revierte empezando por "huéspedes".
- Mensajes en Consola: Monitorea el progreso con:
- "Rolling back": Iniciando reversión.
- "Rolled back": Reversión completada.
Ejemplo de Rollback Básico en Laravel 12: Ejecuta en tu terminal (asumiendo un proyecto con migraciones ejecutadas):
bash
php artisan migrate:rollback
Salida Esperada (ejemplo simplificado):
text
Rolling back: 2025_01_01_000000_create_huespedes_table
Rolled back: 2025_01_01_000000_create_huespedes_table
Rolling back: 2025_01_02_000000_create_urls_table
Rolled back: 2025_01_02_000000_create_urls_table
Tip para Laravel 12: En entornos de desarrollo con starter kits (nuevo en v12), usa esto para pruebas rápidas. Evita en producción para no perder datos.
Escenario Práctico: Comparación con Ejemplos en un Proyecto Real
Escenario Práctico: Comparación con Ejemplos en un Proyecto Real
Usemos un proyecto de gestión hotelera (inspirado en nuestro tutorial de crear migraciones en Laravel 12). Supongamos migraciones iniciales ejecutadas:
- create_administracion_table
- create_checkins_table
- create_urls_table
- create_huespedes_table
Todas en lote 1 en migrations. (Crea el proyecto con composer create-project laravel/laravel hotel-app "12.*").
Ejemplo 1: Usando migrate:refresh – Ideal para Ciclos Controlados
Ejemplo 1: Usando migrate:refresh – Ideal para Ciclos Controlados
Ejemplo 1: Usando migrate:refresh – Ideal para Ciclos Controlados
Agrega dos migraciones de prueba (create_reservas_table y create_pagos_table) con php artisan make:migration. Luego, ejecuta:
bash
php artisan migrate:refresh
Qué Sucede Internamente:
- Rollback: Revierte todo en orden inverso.
- Migrate: Recreación completa.
Salida Esperada:
text
Rolling back: 2025_02_01_000000_create_pagos_table
Rolled back: 2025_02_01_000000_create_pagos_table
Rolling back: 2025_01_15_000000_create_huespedes_table
Rolled back: 2025_01_15_000000_create_huespedes_table
...
Migrating: 2025_01_01_000000_create_administracion_table
Migrated: 2025_01_01_000000_create_administracion_table (0.02s)
Migrating: 2025_02_01_000000_create_pagos_table
Migrated: 2025_02_01_000000_create_pagos_table (0.01s)
¡Éxito! Todo recreado en lote 1 nuevo. Usa esto para actualizaciones seguras en equipos de desarrollo.
Problema Potencial: Borra los archivos de prueba y reejecuta → Error: "No such file or directory" (intenta rollback de inexistentes).
Ejemplo 2: Usando migrate:fresh – El Reset Radical Sin Rollback
Ejemplo 2: Usando migrate:fresh – El Reset Radical Sin Rollback
Si has editado archivos manualmente (común en experimentos locales con Laravel 12), migrate:fresh salva el día. Ignora migrations y borra todo directamente.
Ejecuta (después del error anterior):
bash
php artisan migrate:fresh
Qué Sucede:
- Borra todas las tablas (incluyendo migrations).
- Migra desde cero.
Salida Esperada (más limpia, sin rollback):
text
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2025_01_01_000000_create_administracion_table
Migrated: 2025_01_01_000000_create_administracion_table (0.02s)
Migrating: 2025_01_15_000000_create_huespedes_table
Migrated: 2025_01_15_000000_create_huespedes_table (0.01s)
¡Base de datos fresca en segundos! Perfecto para testing unitario o prototipos con Livewire/React kits de Laravel 12.
Tabla Comparativa: Migrate:Fresh vs. Migrate:Refresh en Laravel 12
Tabla Comparativa: Migrate:Fresh vs. Migrate:Refresh en Laravel 12
| Aspecto | migrate:refresh | migrate:fresh |
|---|---|---|
| Rollback Incluido | Sí (usa tabla migrations) | No (borrado directo de tablas) |
| Cuándo Usar | Actualizaciones controladas, sin ediciones manuales | Resets totales después de cambios manuales |
| Riesgo de Errores | Alto (inconsistencias en migrations) | Bajo (ignora historial) |
| Velocidad | Media (rollback + migrate) | Alta (borrado + migrate) |
| Ejemplo Ideal | Producción/equipos con starter kits v12 | Desarrollo local/testing en PHP 8.3+ |
Fuente: Docs oficiales Laravel 12.
Elige el Comando Correcto para Tus Migraciones en Laravel 12
En Laravel 12, migrate:refresh brilla en flujos ordenados, mientras migrate:fresh es tu aliado para resets sin complicaciones. Prueba estos ejemplos en tu entorno local y di adiós a los errores de rollback.
¿Has probado estos comandos en Laravel 12? ¡Comparte tu experiencia en comentarios! Revisa nuestra guía completa de migraciones o suscríbete para más sobre PHP 8.4, optimización de DB y comandos Artisan avanzados.
Leido 9797 veces | 1 usuarios
Código fuente no disponible.
