💪Reinicia una migración específica en Laravel 'migrate:refresh'
Tags: laravel, php, webdev, tutorial
Published: 2023-06-17 19:17:06

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yfabihmjcp899jbb7ivj.png)

###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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h2td04i7rd3ca80lzc71.png)



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.⚠️⚠️

<span style="color:blue;"> 🎉¡Felicidades!, ahora sabes como realizar un migrate:refresh específico.</span> 🥳

## 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.