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