it-swarm.com.de

laravel 4 Handwerker - Wie kann ein Rollback auf einen bestimmten Migrationszustand durchgeführt werden?

Angenommen, ich habe a.php, b.php, c.php und d.php Migrationsklassen-Dateien. Wie kann ein Rollback auf einen bestimmten Migrationsstatus durchgeführt werden, der in b.php definiert ist, z. B. mit einem handwerklichen Befehl?

23
do.

Ich fürchte, das kannst du nicht direkt machen.

Sie haben folgende Möglichkeiten: 1, Rollback der letzten Migrationsoperation (alle im letzten Stapel durchgeführten Migrationen)

php artisan migrate:rollback

2, Alle Migrationen rückgängig machen

php artisan migrate:reset

3, Alle Migrationen rückgängig machen und erneut ausführen 

php artisan migrate:refresh  
php artisan migrate:refresh --seed

Ändern Sie in Ihrer Situation b.php und seine up()-Methode, und führen Sie dann den artisan migrate:refresh-Befehl aus.

37
Andreyco

Es gibt eine Möglichkeit, sie durch manuelles Bearbeiten der Datenbank zu hacken. Ändern Sie in der Tabelle migrations die Spalte batch, indem Sie der letzten Migration eine andere Chargennummer zuweisen. Beachten Sie, dass sie in aufsteigender Reihenfolge sind, und bearbeiten Sie sie entsprechend. Damit wird nachvollzogen, welche Migrationen separat angewendet wurden.

Dann artisan:rollback ausführen und der letzte "Stapel" wird rückgängig gemacht.

Wenn Sie also alle voneinander trennen möchten, beginnen Sie von oben und geben Sie jeweils 1, 2, 3, 4, 5 usw. ein. Sie können sehen, dass es leicht skriptfähig ist möchte alle Ihre Migrationen trennen.

28
Paul Cristea

Durch meine Erfahrung. Ich migriere nie: Rollback. Normalerweise würde ich eine weitere Migration erstellen, die alle erforderlichen Änderungen vornimmt, um die vorherigen Migrationen rückgängig zu machen.

Auf diese Weise können Sie flexibel sein, wenn Sie 2-x-Schritte zurücksetzen möchten. Sie können einfach eine neue Migration erstellen, um die gewünschten Änderungen vorzunehmen, und dann die neue Migration nach PHP-Handwerker ausführen.

5

In der Tat gibt es diese Funktion (noch) nicht. überraschenderweise

Die beste Idee ist, eine neue Datei backtob.php zu erstellen und die anderen Migrationsdateien aufzurufen. Um das Kopieren und Einfügen zu vermeiden, können Sie Folgendes tun:

class BacktoB {
  public function up () {
     // the database is in the after D state //
     $migrateD = new D();
     $migrateD->down();
     // the database is in the after C state //
     $migrateC = new C();
     $migrateC->down();
     // the database is in the before C state //
     // before C = B //
  }
  public function down () {
     // the database is in the B state //
     $migrateC = new C();
     $migrateC->up();
     // the database is in the after C state //
     $migrateD = new D();
     $migrateD->up();
     // the database is in the after D state //
  }
}

Wie Sie sehen, können Sie das Auf und Ab der Migrationen erstellen, die Sie zurücksetzen möchten.

Es ist nicht das Ideal, aber wir können es tun.

3
Thiago Mata

Laravel 5.3

Mit Laravel 5.3 ist kein umfangreiches Scripting erforderlich. Da es erlaubt, eine bestimmte Anzahl von Migrationen rückgängig zu machen.

php artisan migrate:rollback --step=1

Hier ist das Handbuch page als Referenz.

3

Wenn Sie wirklich wollten - Sie könnten eine benutzerdefinierte Funktion schreiben, die die Migrationstabelle abfragt, nach der gewünschten Datei sucht und ermittelt, wie oft ein Rollback ausgeführt werden soll - dann führt eine Schleife 'Migration: Rollback' aus. bis Sie die erforderliche Migration erreichen ...

2
Laurence

Es gibt einen einfachen, aber schmutzigen Weg:

Wenn Sie a.php, b.php und c.php migrieren und c und b zurücksetzen möchten, können Sie a.php einfach so ändern, dass ein Syntaxfehler auftritt.

Wenn Sie php artisan migrate:rollback ausführen, wird sowohl c als auch b zurückgesetzt und mit einem Fehler in a gestoppt. Ab diesem Zeitpunkt wird der Rollback von c und b als letzter Migrationsvorgang betrachtet.

Vergessen Sie nicht, den Fehler zu beheben, den Sie absichtlich in a.php gemacht haben.

1
mper

Da Laravel lediglich php artisan migrate bereitstellt: rollback, um das Migrationsskript zurückzusetzen, besteht die beste Möglichkeit zum Rollback des ausgewählten Migrationsskripts darin, ein neues Migrationsskript zu erstellen und das Skript in Ihre down-Methode (in das ausgewählte Migrationsskript) aufzunehmen. auf das neu erstellte Migrationsskript . Hoffe diese Hilfe.

0
qatz

Verwenden Sie den PHP-Handwerker migrate: rollback-Befehl.

php artisan migrate:rollback

Verwenden Sie die Option --pretend, um zu sehen, was das Rollback bewirkt.

php artisan migrate:rollback --pretend

Sie können auch eine andere Datenbankverbindung als die Standardverbindung angeben.

php artisan migrate:rollback --pretend --database=other-one
0
HeadAndTail