DEV Community

Cover image for 💪Reinicia una migración específica en Laravel 'migrate:refresh'
Rony Quispe
Rony Quispe

Posted on

💪Reinicia una migración específica en Laravel 'migrate:refresh'

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:

Image description

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:

Image description

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)

Collapse
 
aandresweb profile image
Andres Godinez

🙌