wake-up-neo.com

Rollback einer bestimmten Migration in Laravel

Ich möchte

nur zum Rollback:

Rolled back: 2015_05_15_195423_alter_table_web_directories


Ich renne

php artisan migrate:rollback, 3 meiner Migration werden zurückgesetzt.

Rolled back: 2015_05_15_195423_alter_table_web_directories
Rolled back: 2015_05_13_135240_create_web_directories_table
Rolled back: 2015_05_13_134411_create_contacts_table

Ich lösche

beide von meinem web_directories und meine contacts Tabelle unbeabsichtigt. Ich möchte nie, dass das passiert, und wenn ich nur dieses eine zurücksetzen kann, wird diese Katastrophe niemals passieren.

179
kyo

Wenn Sie in der Tabelle migrations nachsehen, wird für jede Migration eine Chargennummer angezeigt. Wenn Sie also ein Rollback durchführen, wird jede Migration, die Teil des letzten Stapels war, rückgängig gemacht.

Wenn Sie nur die letzte Migration rückgängig machen möchten, erhöhen Sie einfach die Chargennummer um eins. Wenn Sie dann das nächste Mal den Befehl rollback ausführen, wird nur diese eine Migration rückgängig gemacht, da es sich um einen eigenen "Stapel" handelt.

116
Martin Bean

Laravel 5.3+

Einen Schritt zurücksetzen. Nativ.

php artisan migrate:rollback --step=1

Und hier ist die Handbuchseite: docs .


Laravel 5.2 und früher

Ohne Ärger geht es nicht. Einzelheiten finden Sie in Martin Beans Antwort .

195

Bei jedem Rollback erhalten Sie den letzten Migrationsstapel. benutze den Befehl

php artisan migrate:rollback --step=1
20
PAUL KIARIE

Wenn Sie nicht tun können, was @Martin Bean sagt, können Sie einen anderen Trick versuchen.

Erstellen Sie eine neue Migration, und fügen Sie in der Methode up () den Inhalt der Methode down () der Migration ein, für die Sie ein Rollback durchführen möchten, und in der Methode down () den Inhalt der Methode up ().

zum Beispiel, wenn Ihre ursprüngliche Migration so ist

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id')->unsigned();
        $table->string('name');
    });
}
public function down()
{
    Schema::drop('users');
}

führen Sie dies dann in der neuen Migrationsdatei aus

public function up()
{
    Schema::drop('users');
}
public function down()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id')->unsigned();
        $table->string('name');
    });
}

wenn Sie dann die Migration ausführen, wird die Tabelle gelöscht. und wenn Sie das wieder zurück wollen, setzen Sie es einfach zurück.

16
Nehal Hasnayeen

Es mag ein bisschen spät sein, diese Frage zu beantworten, aber hier ist eine sehr gute, saubere und effiziente Möglichkeit, wie ich finde. Ich werde versuchen, so gründlich wie möglich zu sein.

Erstellen Sie vor dem Erstellen Ihrer Migrationen verschiedene Verzeichnisse wie folgt:

    database
       | 
       migrations
            |
            batch_1
            batch_2
            batch_3

Führen Sie dann beim Erstellen Ihrer Migrationen den folgenden Befehl aus (am Beispiel Ihrer Tabellen):

     php artisan make:migration alter_table_web_directories --path=database/migrations/batch_1

oder

     php artisan make:migration alter_table_web_directories --path=database/migrations/batch_2

oder

     php artisan make:migration alter_table_web_directories --path=database/migrations/batch_3

Mit den obigen Befehlen wird die Migrationsdatei im angegebenen Verzeichnispfad erstellt. Dann können Sie einfach den folgenden Befehl ausführen, um Ihre Dateien über die ihnen zugewiesenen Verzeichnisse zu migrieren.

    php artisan migrate alter_table_web_directories --path=database/migrations/batch_1

* Hinweis: Sie können batch_1 in batch_2 oder batch_3 oder in einen beliebigen Ordnernamen ändern, in dem Sie die Migrationsdateien speichern. Solange dieser im Verzeichnis database/migrations oder in einem bestimmten Verzeichnis verbleibt.

Wenn Sie Ihre spezifischen Migrationen rückgängig machen müssen, können Sie als Nächstes ein Batch-Rollback durchführen, wie unten gezeigt:

    php artisan migrate:rollback --step=1
                    or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_1

oder

    php artisan migrate:rollback --step=2
                    or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_2

oder

    php artisan migrate:rollback --step=3
                    or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_3

Die Verwendung dieser Techniken ermöglicht Ihnen mehr Flexibilität und Kontrolle über Ihre Datenbank (en) und alle an Ihrem Schema vorgenommenen Änderungen.

8
Andre F.

Verwenden Sie den Befehl "php artisan migrate: rollback --step = 1", um die Migration auf einen Schritt zurückzusetzen.

Weitere Informationen finden Sie unter folgendem Link: - https://laravel.com/docs/master/migrations#running-migrations

4
Shah-Kodes

Einen Schritt zurücksetzen. Nativ.

php artisan migrate:rollback --step=1

Rollback in zwei Schritten. Nativ.

php artisan migrate:rollback --step=2
4
Terminal

besser zu verwenden aktualisieren migrieren

Sie können eine begrenzte Anzahl von Migrationen zurücksetzen und erneut migrieren, indem Sie die Option step für den Befehl refresh angeben. Mit dem folgenden Befehl werden beispielsweise die letzten beiden Migrationen zurückgesetzt und erneut migriert:

php artisan migrate:refresh --step=2

ansonsten verwendetes Rollback migrieren

Sie können eine begrenzte Anzahl von Migrationen rückgängig machen, indem Sie die step-Option für den rollback-Befehl bereitstellen. Mit dem folgenden Befehl werden beispielsweise die letzten drei Migrationen zurückgesetzt:

php artisan migrate:rollback --step=3

weitere Informationen zur Migration siehe

4
Jignesh Joisar

Migrieren Sie die Tabellen einzeln.

Ändern Sie die Chargennummer der Migration, für die Sie ein Rollback durchführen möchten, auf die höchste.

Führen Sie migrate: rollback aus.

Dies ist möglicherweise nicht die bequemste Art, größere Projekte zu bearbeiten.

3
Jeffz

Wenn Sie die ursprüngliche Migrationsdatei ändern und erneut migrieren möchten, können Sie dieses Paket zum Migrieren verwenden. (Gilt für Laravel 5.4 oder höher)

Installieren Sie zuerst das Paket in Ihrem Laravel Projekt:

composer require caloskao/migrate-specific

Befehl registrieren unter app/Console/Kernel.php:

protected $commands = [
    \CalosKao\MigrateSpecific::class
];

Führen Sie nun diesen Befehl aus, um Ihre Datei zu migrieren

php artisan migrate:specific database/migrations/table.php
2
Calos Kao
INSERT INTO Homestead.bb_migrations (`migration`, `batch`)  VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')

etwas wie das

1
Harry Bosh

1.) Wechseln Sie in der Datenbank zur Migrationstabelle, und löschen Sie den Eintrag der Migration, der sich auf die Tabelle bezieht, die Sie löschen möchten.

Beispiel für ein Migrationstabellen-Image

2.) Löschen Sie als Nächstes die Tabelle, die sich auf die Migration bezieht, die Sie gerade aus Anweisung 1 gelöscht haben.

Beispiel für das Löschen eines Tabellenbilds

3.) Nehmen Sie abschließend die gewünschten Änderungen an der Migrationsdatei der Tabelle vor, die Sie aus Anweisung Nr. 3 gelöscht haben. 2 dann starte php artisan migrate, um die Tabelle erneut zu migrieren.

1
Kidali Kevin

Wie in im Laravel manual angegeben) können Sie mit der Option --step Eine bestimmte Anzahl von Migrationen rückgängig machen

php artisan migrate:rollback --step=5
0
Slav Levin

Am besten erstellen Sie eine neue Migration und nehmen die erforderlichen Änderungen vor.

Worst-Case-Problemumgehung (if Sie haben Zugriff auf DB plus ein RESET der Tabellendaten ist in Ordnung):

  1. Gehe zu DB und löschen/benenne den Migrationseintrag um für your-specific-migration
  2. Drop die mit your-specific-migration Erstellte Tabelle
  3. Führen Sie php artisan migrate --path=/database/migrations/your-specific-migration.php Aus

Dies zwingt laravel, diese bestimmte Migration auszuführen, da kein Eintrag darüber im Migrationsverlauf von Laravel vorhanden ist

0
Deepak Thomas