Bezpiecznie usuń migrację w Laravel


206

W Laravel wydaje się, że istnieje polecenie tworzenia migracji, ale nie usuwania.

Utwórz polecenie migracji:

php artisan migrate:make create_users_table

Jeśli chcę usunąć migrację, czy mogę po prostu bezpiecznie usunąć odpowiedni plik migracji w folderze bazy danych / migracji?

Plik migracji:

2013_05_31_220658_create_users_table

Odpowiedzi:


375

Przypadkowo utworzyłem migrację o złej nazwie (polecenie:) php artisan migrate:make. I nie uruchomić ( php artisan migrate) migrację, więc postanowiłem go usunąć. Moje kroki:

  1. Ręcznie usuń plik migracji w obszarze app/database/migrations/my_migration_file_name.php
  2. Zresetuj pliki autoloadera kompozytora: composer dump-autoload
  3. Zrelaksować się

Jeśli uruchomiłeś migrację ( php artisan migrate), możesz to zrobić:

a) Uruchom migrate:rollback- jest to właściwy sposób na cofnięcie ostatniej migracji (Thnx @Jakobud)

b) Jeśli migrate:rollbacknie działa, zrób to ręcznie (pamiętam błędy z migracją: wycofywanie w poprzednich wersjach):

  1. Ręcznie usuń plik migracji w obszarze app/database/migrations/my_migration_file_name.php
  2. Zresetuj pliki autoloadera kompozytora: composer dump-autoload
  3. Zmodyfikuj bazę danych: Usuń ostatni wpis z tabeli migracji

2
Dzięki. Gottcha dla mnie po usunięciu migracji zapomniał uruchomić kompozytora dump-autoload
Theo Kouzelis

7
Jeśli migracja została uruchomiona, „właściwym” sposobem jest uruchomienie migrate:rollbackprzywracania migracji, a następnie usunięcie pliku migracji i zrzut automatycznego ładowania. Nie trzeba hakować bazy danych ani tabeli migracji.
Jake Wilson

świetna odpowiedź na kolejne kroki (migracja php rzemieślnika) (Y)
Imran Khan

Mój Bóg i ja dręczymy się, kiedy się mylę. Dziękuję Ci.
Pablo Contreras

4. Usuń rzeczywistą tabelę z DB
Jin

64

Jeśli migracja została uruchomiona (czytaj: migrowana), powinieneś wycofać migrację, aby wyczyścić historię z tabeli bazy danych. Po przywróceniu powinieneś mieć możliwość bezpiecznego usunięcia pliku migracji, a następnie kontynuowania migracji.


Jednak nie przeprowadził migracji. Nie możesz cofnąć tego, czego nie zrobiłeś, prawda?
Stephane

9
Nie, nie możesz, ale w takim przypadku historia nie powinna być przechowywana w bazie danych migracji, co oznacza, że ​​możesz bezpiecznie usunąć plik.
Jason Lewis

14
 php artisan migrate:fresh

Powinieneś wykonać pracę, jeśli jesteś w fazie rozwoju, a pożądanym rezultatem jest zacząć wszystko od nowa.

W produkcji może nie jest to pożądana rzecz, dlatego powinieneś być reklamowany. (Polecenie migrate: fresh usunie wszystkie tabele z bazy danych, a następnie uruchom polecenie migracji).


5
3 głosy poparcia? OP poprosił o sposób usunięcia migracji, a nie zniszczenia i odświeżenia całej bazy danych. To okropna rada, nie rób tego, chyba że wiesz, co robisz.
Goodbytes,

uprzejmie przeczytaj o różnicy między migracją: odśwież i migruj: świeżo opisałeś pierwszą, później sposób częściowego resetu, unikając ręcznej pracy!
joash

1
migrate: fresh natychmiast usuwa WSZYSTKIE tabele i ponownie uruchamia migracje, jakby były uruchamiane po raz pierwszy. Nie ma w tym nic częściowego ... znikną wszelkie dane. Naprawi to problem, ale nie jest to poprawna odpowiedź na pytanie.
Goodbytes,


7

Przypadkowo utworzyłem dwa razy create_users_table. Przesłonił niektóre klasy i zmienił wycofywanie w ErrorException.

To, co musisz zrobić, to znaleźć plik autoload_classmap.php w folderze vendor / kompozytor i poszukać określonego wiersza kodu, takiego jak

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

i edytuj ścieżkę. W takim razie wycofanie powinno być w porządku.


Jeśli - tak jak ja - po prostu poszedłeś i zmieniłeś nazwę pliku migracji, to jest odpowiedź, której szukasz! Dzięki.
Berdus

2
Możesz także po prostu zrobić „kompozytora dumpautoload”
FooBar

5

Zgadzam się z aktualnymi odpowiedziami, chcę tylko dodać trochę więcej informacji.

Dodano nową funkcję do Laravel 5.3 i nowszych wersji , która pozwoli ci wycofać pojedynczą migrację:

php artisan migrate:rollback --step=1

po Ręcznie usuń plik migracji w obszarze database/migrations/my_migration_file_name.php

Jest to świetna funkcja podczas przeprowadzania migracji

W ten sposób możesz bezpiecznie usunąć migrację w laravel tylko w 2 krokach


0

Raczej zrobię to ręcznie

  1. Najpierw usuń model (jeśli go nie potrzebujesz)
  2. Usuń migrację z ...database/migrations folderu
  3. Jeśli już przeprowadziłeś migrację, tj. Jeśli już uruchomiłeś php artisan migrate , zaloguj się do phpmyadmin lub SQL (w zależności od przypadku) i w bazie danych usuń tabelę utworzoną przez migrację
  4. Nadal w bazie danych, w folderze migracji znajdź wiersz o tej nazwie pliku migracji i usuń go.

Działa dla mnie, mam nadzieję, że to pomaga!


-2

To działa dla mnie:

  1. Usunąłem wszystkie tabele w mojej bazie danych, głównie tabelę migracji.
  2. php artisan migrate:refresh

w laravel 5.5.43

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.