Refresh vs. Fresh

Diferencias entre migrate:fresh vs migrate:refresh en Laravel

Video imagen_logo_vs

En esta publicación estaremos explicando la diferencia entre estos dos comandos.

Si viste nuestra publicación sobre migraciones seguro notaste que hay un comando que olvidamos mencionar: “php artisan migrate:fresh” y es que este comando es bastante similar al de “php artisan migrate:refresh” ya que ambos comandos hacen de forma implícita un “php artisan migrate” pero la diferencia radica en que uno hace un rollback y el otro no, esto puede que no se entienda con solo decirlo por eso hemos planteado una situación que te ayude a entender cuando usar uno u otro.

Hay una aclaración muy importante que debo hacerles, para entender la situación planteada más adelante:

¿Cómo funcionan los rollback en los comandos migrate?

Los comandos: “migrate:rollback”, “migrate:refresh” y “migrate:reset” funcionan usando la tabla “migrations” para saber que migraciones existen y así poder revertirlas o mejor dicho para hacerles rollback. Si en la tabla “migrations” existen migraciones que ya no estan fisicamente en la carpeta “migration” (es decir borraste ficheros), tendrás un problema y es que si bien puedes borrar ficheros, tal acción en ningún momento las borrara de la tabla “migrations”.El escenario que planteamos más adelante refuerza esto último porque es justamente a lo que haremos, borrar archivos de migraciones.

Una vez ejecutas un comando que hace rollback verás en tu consola muchos mensajes, veamos qué son esos mensajes en la imagen a continuación, en la que se usó: “php artisan migrate:rollback”:

imagen

Se hizo un rollback a cada una de las migraciones que se habían registrado en la tabla “migrations”; pero empezando por el final, por lo que primero se haría un rollback de huéspedes, porque es la última registrada, luego un rollback a la migración de urls, porque es la penúltima, luego a la migración de checkins, la de administración y así sucesivamente; es así cómo trabajan los rollback de los comandos de migración.

Ejemplo de cuando usar el comando migrate:fresh

El proyecto

Usaremos de ejemplo el mismo proyecto que usamos en la publicación de como crear migraciones, en el cual solo tenemos las migraciones que ven en la imagen a continuación, además de que en nuestra base de datos todas esas migraciones ya son tablas y en particular la tabla “migrations” ya tiene registradas cada migración con lote 1, que significa que todas las migraciones se crearon juntas. 

imagen2

Migraciones de prueba

agregamos dos migraciones más al proyecto y luego usamos el comando "php artisan migrate:refresh".

Veamos la imagen a continuación, luego de que ejecutamos el comando vienen los rollback y lo primero que vemos el primer “rolling back” esta es la forma que tiene el comando para avisarte como va el avance, primero te dice “rolling back” que significa “volviendo atrás” o retrocediendo para este caso, refiriéndose a que va a iniciar el rollback para la migración a continuación y luego te dice “rolled back” que significa que ya finalizó con el rollback de la migración: “create_huespedes_table”, para cada migración hará lo mismo y así si hay algún error en el proceso sabremos donde pasó, dicho error

En la parte en la que se tiene que migrar todo de nuevo, se sigue un proceso bastante similar, primero el comando te avisa que fichero se migrará con un “Migrating” y luego te confirma que se migró correctamente con un “Migrated”, es decir ya existe tu tabla en tu base de datos.

imagen3

Se borraron todas las migraciones originales que tenían el lote 1 posterior a eso se volverán a crear todas, incluidas las pruebas, también con lote 1 en la tabla “migrations”.

Borrar las migraciones de prueba

borramos las pruebas que hicimos y luego volvemos a intentar el comando "php artisan migrate:refresh"

imagen4

Tendremos un problema y es que el comando intentará hacer un rollback de todas las migraciones que estén en la tabla “migrations”, y en tal tabla ya se encontraban las migraciones de prueba que creamos, por lo que al borrarlas, ahora el comando intentará hacer un rollback de migraciones que ya no existen.

¿qué pasa si vuelvo a crear las migraciones con el mismo nombre?

Ahora traeremos de vuelta las tablas que teníamos antes, luego ejecutaremos el comando "php artisan migrate:refresh" de nuevo, y tendremos el error que ven en la imagen a continuación.

imagen5

¿cómo solucionamos este problema? 

si se dieron cuenta el problema es que estamos intentando hacer rollback de tablas que borramos nosotros manualmente; Laravel pensando en todas estas situaciones nos permite usar el comando “php artisan migrate:fresh” que tiene un “php artisan migrate” implícito, pero no un rollback, entonces si lo ejecutamos ya estaría solucionado el problema porque este comando no hace un rollback y directamente se encarga de borrar todas tus migraciones, sin revisar la tabla “migrations”.

imagen6

No hay descargable

Redactado por: vidalrodrigo, Leido 1960 veces

CURSOS DE PROGRAMACIÓN CON PROYECTOS

© Todos los derechos reservados Codea App FullStack | Cursos de programación avanzados | 2020 - 2021