Откат одной конкретной миграции в 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 таблица непреднамеренно.
К сожалению, я никогда не хочу, чтобы это произошло, и если я смогу откатить только этот конкретный, эта катастрофа никогда не произойдет.





надеюсь



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



любая рекомендация будет высоко оценена.

859   10  

10 ответов:

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

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

Laravel 5.3+

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

php artisan migrate:rollback --step=1

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


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

не обойтись без некоторых хлопот. Для получения дополнительной информации, проверьте Мартин Бин ответ.

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

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

например, если ваша исходная миграция выглядит так

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

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

php artisan migrate:rollback --step=5

Comments

    Ничего не найдено.