Migrate:Fresh vs. Migrate:Refresh en Laravel

Autor: J. Luis, 14 noviembre, 2025

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.

¡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?

¿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

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

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:

  1. Rollback: Revierte todo en orden inverso.
  2. 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

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:

  1. Borra todas las tablas (incluyendo migrations).
  2. 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

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.

Compartir link del tutorial con tus amigos

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú