20 septiembre, 2021
En esta publicación estaremos explicando la diferencia entre estos dos comandos.
Suscríbete a nuestro canal en Youtube
SuscríbirseSi 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:
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”:
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.
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.
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.
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”.
borramos las pruebas que hicimos y luego volvemos a intentar el comando "php artisan migrate:refresh"
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.
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.
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”.
Leido 6648 veces
Curso Laravel 9 Avanzado Desarrollo Web Administrable para negocio
Descarga del código fuente
USD 10.00
© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023