Откат одной конкретной миграции в Laravel

Я хочу

откатить только :

Rolled back: 2015_05_15_195423_alter_table_web_directories


Я бегу

php artisan migrate:rollback, 3 моей миграции откатываются.

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

удалить

мои web_directories и меня contacts таблица непреднамеренно. К сожалению, я не хочу, чтобы это случилось, и если я смогу откатить только этот конкретный, эта катастрофа никогда не случится.


надеюсь

кто-то может научить меня, как предотвратите это снова.

любая рекомендация будет очень признательна.

10 ответов


Если вы посмотрите в свой migrations таблицы, то вы увидите, что каждая миграция имеет номер партии. Поэтому при откате он откатывает каждую миграцию, которая была частью последнего пакета.

Если вы хотите откатить только самую последнюю миграцию, просто увеличьте номер пакета на один. Тогда в следующий раз вы запустите rollback command, он будет откатывать только одну миграцию, поскольку она находится в" пакете".


Laravel 5.3+

откат на один шаг. Прирожденно.

php artisan migrate:rollback --step=1

и вот страница руководства:docs.


фреймворк Laravel 5.2 и до

нет способа обойтись без некоторых хлопот. Для получения дополнительной информации проверьте Martin Bean's ответ.


Если вы не можете сделать то, что сказал @Martin Bean, то вы можете попробовать другой трюк.

создайте новую миграцию и в этом файле в методе up() вставьте то, что в методе down() миграции, которую вы хотите откатить, и в методе down() вставьте то, что в методе up ().

e.g если исходная миграция выглядит следующим образом

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

затем в новом файле миграции сделайте это

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

а затем запустите миграцию, она удалит таблицу. и если вы опять хочу что обратно просто откатить.


каждый раз при откате вы получаете последний пакет миграции. используйте команду

php artisan migrate:rollback --step=1

это может быть немного поздно, чтобы ответить на этот вопрос, но вот очень хороший, чистый и эффективный способ сделать это, я чувствую. Я постараюсь сделать все как можно тщательнее.

перед созданием миграций создайте различные каталоги, например:

    database
       | 
       migrations
            |
            batch_1
            batch_2
            batch_3

затем при создании миграций выполните следующую команду (используя таблицы в качестве примера):

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

или

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

или

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

команды выше сделают переноса файла в данный каталог. Затем вы можете просто запустить следующую команду для переноса файлов через назначенные каталоги.

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

*Примечание: Вы можете изменить batch_1 на batch_2 или batch_3 или любое имя папки, в которой вы храните файлы миграции. Пока он остается в каталоге базы данных / миграций или некотором указанном каталоге.

далее, Если вам нужно откатить определенные миграции, вы можете откатить пакетно, как показано ниже:

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

или

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

или

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

использование этих методов позволит вам повысить гибкость и контроль над вашей базой данных и любыми изменениями, внесенными в вашу схему.


перенос таблиц один за другим.

измените номер пакета миграции, который вы хотите откатить, на самый высокий.

выполнить миграцию:откат.

возможно, это не самый удобный способ справиться с большими проектами.


откат на один шаг. Прирожденно.

php artisan migrate:rollback --step=1

откат на два шага. Прирожденно.

php artisan migrate:rollback --step=2

INSERT INTO homestead.bb_migrations (`migration`, `batch`)  VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')

как то так


используйте команду "php artisan migrate: rollback --step=1" для отката миграции на 1 шаг назад.

более подробная информация по ссылке :- https://laravel.com/docs/master/migrations#running-migrations


As указано в руководстве Laravel, вы можете откатить определенное количество миграций с помощью --step опции

php artisan migrate:rollback --step=5