Cuando trabajamos con Laravel y su potente sistema de migraciones de base de datos, a veces nos encontramos en situaciones en las que necesitamos reiniciar una migración específica sin tener que recurrir a complicados pasos de rollback. Afortunadamente, Laravel nos ofrece una solución elegante con el comando migrate:refresh. En este artículo, exploraremos cómo usar migrate:refresh para reiniciar una migración de un lote en particular, sin afectar las migraciones anteriores o posteriores.
Antes de comenzar debes conocer:
- Laravel básico
- Migraciones laravel básico
- Comandos artisan
Comenzamos ✍️
Supongamos que estamos desarrollando una aplicación web para una escuela. Hemos realizado varias migraciones para configurar nuestras tablas, incluyendo las relacionadas con los cursos, las notas y los estudiantes.
Para enfocarnos en el tema, ignoraremos que hay dentro de las clases y que cambios tendrán, concentremonos en las migraciones 🐺
Migraciones 👷♂️
Migración de courses (Batch 1):
Creamos una migración inicial para la tabla de courses llamada 2023_06_17_012246_create_courses_table.php
y la ejecutamos mediante php artisan migrate
.
Migración de grades (Batch 2):
Posteriormente, agregamos otra migración para la tabla de grades llamada 2023_06_17_012637_create_grades_table.php.php
y la ejecutamos con php artisan migrate
. Esta migración se asigna al segundo lote (batch 2) en la tabla migrations.
Migración de students (Batch 3):
Continuamos con otra migración para la tabla de students llamada 2023_06_17_013600_create_students_table.php.php
y la ejecutamos con php artisan migrate
. Esta migración se asigna al tercer lote (batch 3) en la tabla migrations.
En la tabla migrations de nuestra base de datos se veria lo siguiente:
Situación
Ahora, supongamos que hemos realizado cambios en la migración de grades (2023_06_17_012637_create_grades_table.php.php
) y deseamos reiniciar solo esa migración sin afectar las migraciones de cursos y estudiantes.
Ejecutamos el comando
php artisan migrate:refresh --path=database/migrations/2023_06_17_012637_create_grades_table.php.php
El comando migrate:refresh lo que hace es el ejecutar por cada migración su método down y luego su método up.
Este comando por si solo reiniciaria todos los archivos de migraciones. Por ello usamos el parámetro path, para indicar a laravel que solo ejecute esto para un archivo específico
sub(Es posible que en versiones anteriores de Laravel 10 debas comenzar el path con /database)
Este comando reiniciará la migración específica de grades, eliminando la tabla grades y recreándola de acuerdo con la definición de la migración create_grades_table.
Esto modificará el contador de batch, ya que eliminará el registro de migración inicial que tuvo grades_table y lo registrará de nuevo con el nuevo máximo número de batch.
Se vería lo siguiente:
Como se puede ver, la migración de grades fue eliminada y registrada de nuevo, cambiando su batch de 2 a 4.
⚠️⚠️ Recuerda, si la migración implica recrear una tabla o columna, la data que existe en la base de datos será eliminada. Este comando se repotencia si usas seeders para llenar nuevamente la tabla.⚠️⚠️
🎉¡Felicidades!, ahora sabes como realizar un migrate:refresh específico. 🥳
Ajá. ¿Pero que hago con esto? 🤡
Este comando te ayudará a corregir una migración sin tener que deshacer migraciones posteriores a estas. Asi no necesitarás crear nuevas migraciones, lo que conlleva a crear procesos innecesarios en tu desarrollo.
Top comments (1)
🙌