Inicio » Blog » Laravel

20 septiembre, 2021

Refresh vs. Fresh

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

Ver video en

Suscríbete a nuestro canal en Youtube

Suscríbirse

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


Leido 5907 veces

Compartir link del tutorial con tus amigos


Laravel 9 Página Web para Negocio Laravel 9 Página Web para Negocio

Curso Laravel 9 Avanzado Desarrollo Web Administrable para negocio

Descarga del código fuente

USD 33.00

Aprende más sobre Laravel

Cursos de programación

Codea Codea App

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

© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023