Eliminar de forma segura la migración en Laravel

206

En Laravel, parece haber un comando para crear una migración, pero no eliminarla.

Crear comando de migración:

php artisan migrate:make create_users_table

Si deseo eliminar la migración, ¿puedo eliminar de manera segura el archivo de migraciones correspondiente dentro de la carpeta de base de datos / migraciones?

Archivo de migraciones:

2013_05_31_220658_create_users_table
Globalz
fuente

Respuestas:

375

Accidentalmente creé una migración con un mal nombre (comando:) php artisan migrate:make. No ejecuté ( php artisan migrate) la migración, así que decidí eliminarla. Mis pasos

  1. Eliminar manualmente el archivo de migración en app/database/migrations/my_migration_file_name.php
  2. Restablezca los archivos de carga automática del compositor: composer dump-autoload
  3. Relajarse

Si ejecutó la migración ( php artisan migrate), puede hacer esto:

a) Ejecutar migrate:rollback: es la forma correcta de deshacer la última migración (Thnx @Jakobud)

b) Si migrate:rollbackno funciona, hágalo manualmente (recuerdo errores con migrate: rollback en versiones anteriores):

  1. Eliminar manualmente el archivo de migración en app/database/migrations/my_migration_file_name.php
  2. Restablezca los archivos de carga automática del compositor: composer dump-autoload
  3. Modifique su base de datos: elimine la última entrada de la tabla de migraciones
malisokan
fuente
2
Gracias. El problema para mí después de eliminar una migración fue olvidar ejecutar la carga automática del volcado del compositor
Theo Kouzelis
77
Si ha ejecutado la migración, la forma "correcta" es ejecutar migrate:rollbackpara revertir la migración, luego elimine el archivo de migración y descargue la carga automática. No es necesario hackear la base de datos o la tabla de migraciones.
Jake Wilson
gran respuesta para los pasos posteriores (php artisan migrate) (Y)
Imran Khan
Mi Dios y yo nos atormentamos cuando estaba equivocado. Gracias.
Pablo Contreras
4. Eliminar la tabla real del DB
Jin
64

Si la migración se ha ejecutado (léase: migrado), debe revertir su migración para borrar el historial de la tabla de la base de datos. Una vez que haya retrocedido, debería poder eliminar con seguridad su archivo de migración y luego continuar con la migración nuevamente.

Jason Lewis
fuente
Sin embargo, no ha llevado a cabo la migración. No puedes revertir lo que realmente no hiciste, ¿verdad?
Stephane
9
No, no puede, pero si ese es el caso, entonces no debería haber un historial almacenado en la base de datos de migraciones, lo que significa que puede eliminar el archivo de forma segura.
Jason Lewis
14
 php artisan migrate:fresh

Debe hacer el trabajo, si está en desarrollo y el resultado deseado es comenzar de nuevo.

En producción, eso quizás no sea lo deseado, por lo que debería ser anunciado. (El comando migrate: fresh eliminará todas las tablas de la base de datos y luego ejecutará el comando migrate).

joash
fuente
55
3 votos a favor? El OP solicitó una forma de eliminar una migración, no destruir y actualizar toda la base de datos. Este es un consejo horrible, no hagas esto a menos que sepas lo que estás haciendo.
Goodbytes
lea amablemente sobre la diferencia entre migrate: refresh y migrate: fresh que ha visto que describe el primero, el último en modo parcial hace un reset parcial evitando el trabajo manual.
Joash
1
migrate: fresh elimina inmediatamente TODAS las tablas y vuelve a ejecutar las migraciones como si se ejecutaran por primera vez No hay nada parcial al respecto ... cualquier información se habrá ido. Solucionará el problema, pero no es una respuesta válida a la pregunta.
Goodbytes
12

Es probable que también necesite eliminar la entrada de la tabla de migraciones.

Stephane
fuente
7

Accidentalmente creé dos veces create_users_table. Anuló algunas clases y convirtió la reversión en ErrorException.

Lo que debe hacer es encontrar autoload_classmap.php en la carpeta del proveedor / compositor y buscar la línea de código específica como

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

y editar ruta. Entonces tu reversión debería estar bien.

JR Tan
fuente
Si usted, como lo hice, simplemente cambió de nombre y cambió el nombre de un archivo de migración, ¡esta es la respuesta que está buscando! Gracias.
Berdus
2
También podría simplemente hacer "compositor dumpautoload"
FooBar
5

Estoy de acuerdo con las respuestas actuales, solo quiero agregar un poco más de información.

Se ha agregado una nueva característica a Laravel 5.3 y versiones superiores que le permitirán retroceder una sola migración:

php artisan migrate:rollback --step=1

después, elimine manualmente el archivo de migración en database/migrations/my_migration_file_name.php

Esta es una gran característica para cuando ejecuta una migración

De esta manera, puede eliminar de forma segura la migración en laravel solo en 2 pasos

Udhav Sarvaiya
fuente
0

Prefiero hacerlo manualmente

  1. Elimine el modelo primero (si no lo necesita) ya no necesita el modelo
  2. Eliminar la migración de la ...database/migrationscarpeta
  3. Si ya ha migrado, es decir, si ya ha ejecutado php artisan migrate, inicie sesión en su phpmyadmin o SQL (según sea el caso) y en su base de datos, elimine la tabla creada por la migración
  4. Aún dentro de su base de datos, en la carpeta de migraciones, ubique la fila con ese nombre de archivo de migración y elimine la fila.

Funciona para mí, espero que ayude!

DAVID AJAYI
fuente
-2

Esto funciona para mi:

  1. Eliminé todas las tablas de mi base de datos, principalmente la tabla de migraciones.
  2. php artisan migrate:refresh

en laravel 5.5.43

ederrafo
fuente