Entfernen Sie die Migration sicher in Laravel

206

In Laravel scheint es einen Befehl zum Erstellen, aber nicht zum Entfernen einer Migration zu geben.

Migrationsbefehl erstellen:

php artisan migrate:make create_users_table

Wenn ich die Migration löschen möchte, kann ich dann einfach die entsprechende Migrationsdatei im Ordner Datenbank / Migrationen sicher löschen?

Migrationsdatei:

2013_05_31_220658_create_users_table
Globalz
quelle

Antworten:

375

Ich habe versehentlich eine Migration mit einem schlechten Namen erstellt (Befehl :) php artisan migrate:make. Ich habephp artisan migrate die Migration nicht ausgeführt ( ), daher habe ich beschlossen, sie zu entfernen. Meine Schritte:

  1. Löschen Sie die Migrationsdatei manuell unter app/database/migrations/my_migration_file_name.php
  2. Setzen Sie die Autoload-Dateien des Komponisten zurück: composer dump-autoload
  3. Entspannen

Wenn Sie die Migration ( php artisan migrate) ausgeführt haben, können Sie Folgendes tun:

a) Ausführen migrate:rollback- Dies ist der richtige Weg, um die letzte Migration rückgängig zu machen (Thnx @Jakobud).

b) Wenn migrate:rollbackdies nicht funktioniert, machen Sie es manuell (ich erinnere mich an Fehler mit migrate: rollback in früheren Versionen):

  1. Löschen Sie die Migrationsdatei manuell unter app/database/migrations/my_migration_file_name.php
  2. Setzen Sie die Autoload-Dateien des Komponisten zurück: composer dump-autoload
  3. Ändern Sie bitte Ihre Datenbank: Entfernen Sie den letzten Eintrag aus der Migrationen Tabelle
Malisokan
quelle
2
Vielen Dank. Die Gottcha für mich nach dem Löschen einer Migration war das Vergessen, Composer Dump-Autoload
auszuführen
7
Wenn Sie die Migration ausgeführt haben, besteht die "richtige" Methode darin, migrate:rollbackdie Migration zurückzusetzen, dann die Migrationsdatei zu löschen und das automatische Laden zu sichern. Sie müssen weder die Datenbank noch die Migrationstabelle hacken.
Jake Wilson
Tolle Antwort für Schritte nach (PHP Artisan Migrate) (Y)
Imran Khan
Mein Gott und ich quälten mich, als ich falsch lag. Danke dir.
Pablo Contreras
4. Löschen Sie die aktuelle Tabelle aus der DB
Jin
64

Wenn die Migration ausgeführt wurde (lesen: migriert), sollten Sie Ihre Migration zurücksetzen, um den Verlauf aus Ihrer Datenbanktabelle zu löschen. Nach dem Zurücksetzen sollten Sie in der Lage sein, Ihre Migrationsdatei sicher zu löschen und anschließend erneut zu migrieren.

Jason Lewis
quelle
Er hat die Migration jedoch nicht durchgeführt. Sie können nicht zurücksetzen, was Sie nicht getan haben, oder?
Stephane
9
Nein, das können Sie nicht, aber wenn dies der Fall ist, sollte in der Migrationsdatenbank kein Verlauf gespeichert sein, sodass Sie die Datei sicher löschen können.
Jason Lewis
14
 php artisan migrate:fresh

Sollte den Job machen, wenn Sie in der Entwicklung sind und das gewünschte Ergebnis ist, von vorne zu beginnen.

In der Produktion ist das vielleicht nicht das Gewünschte, also sollten Sie beworben werden. (Der Befehl migrate: fresh löscht alle Tabellen aus der Datenbank und führt dann den Befehl migrate aus.)

Joash
quelle
5
3 positive Stimmen? Das OP fragte nach einer Möglichkeit, eine Migration zu löschen, nicht die gesamte Datenbank zu zerstören und zu aktualisieren. Dies ist ein schrecklicher Rat. Tun Sie dies nur, wenn Sie wissen, was Sie tun.
Goodbytes
Bitte lesen Sie über den Unterschied zwischen migrieren: aktualisieren und migrieren: frisch Sie haben gesehen, dass Sie das erste beschreiben, das spätere wird teilweise zurückgesetzt, wodurch die manuelle Arbeit vermieden wird!
Joash
1
migrieren: fresh löscht sofort ALLE Tabellen und führt Migrationen erneut aus, als ob sie zum ersten Mal ausgeführt würden. Es gibt nichts Partielles daran. Alle Daten werden weg sein. Es wird das Problem beheben, aber es ist keine gültige Antwort auf die Frage.
Goodbytes
12

Wahrscheinlich müssen Sie den Eintrag auch aus der Migrationstabelle löschen.

Stephane
quelle
7

Ich habe versehentlich zweimal create_users_table erstellt. Es hat einige Klassen überschrieben und das Rollback in ErrorException umgewandelt.

Was Sie tun müssen, ist autoload_classmap.php im Vendor / Composer-Ordner zu finden und nach der spezifischen Codezeile zu suchen, wie z

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

und Pfad bearbeiten. Dann sollte Ihr Rollback in Ordnung sein.

JR Tan
quelle
Wenn Sie - wie ich - einfach eine Migrationsdatei umbenannt haben, ist dies die Antwort, nach der Sie suchen! Vielen Dank.
Berdus
2
Sie könnten auch einfach "Composer Dumpautoload" machen
FooBar
5

Ich stimme den aktuellen Antworten zu, ich möchte nur ein wenig mehr Informationen hinzufügen.

In Laravel 5.3 und höher wurde eine neue Funktion hinzugefügt, mit der Sie eine einzelne Migration zurücksetzen können:

php artisan migrate:rollback --step=1

Löschen Sie anschließend die Migrationsdatei manuell unter database/migrations/my_migration_file_name.php

Dies ist eine großartige Funktion, wenn Sie eine Migration ausführen

Auf diese Weise können Sie die Migration in Laravel nur in zwei Schritten sicher entfernen

Udhav Sarvaiya
quelle
0

Ich werde es lieber manuell machen

  1. Löschen Sie das Modell zuerst (falls Sie dies nicht tun) und benötigen Sie das Modell nicht mehr
  2. Löschen Sie die Migration aus dem ...database/migrationsOrdner
  3. Wenn Sie bereits migriert haben, dh wenn Sie bereits ausgeführt haben php artisan migrate, melden Sie sich bei Ihrem phpmyadmin oder SQL an (je nachdem, was der Fall ist) und löschen Sie in Ihrer Datenbank die durch die Migration erstellte Tabelle
  4. Suchen Sie in Ihrer Datenbank im Migrationsordner die Zeile mit dem Namen der Migrationsdatei und löschen Sie die Zeile.

Funktioniert für mich, hoffe es hilft!

DAVID AJAYI
quelle
-2

Das funktioniert bei mir:

  1. Ich habe alle Tabellen in meiner Datenbank gelöscht, hauptsächlich die Migrationstabelle.
  2. php artisan migrate:refresh

in Laravel 5.5.43

ederrafo
quelle