在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表无意中。 可悲的是,我从来不希望这样的事情发生,如果我只能回滚那个特定的事件,这场灾难就不会发生。


我希望

有人可以教我如何防止这种情况再次发生。

任何build议将不胜感激。

如果您查看您的migrations表,那么您会看到每个迁移都有一个批号。 所以当你回滚的时候,它会回滚最后一批中的每一个迁移。

如果您只想回滚最后一次迁移,那么只需将批号加1即可。 然后下一次运行rollback命令时,它只会回滚一个迁移,因为它是“批处理”。

Laravel 5.3+

回滚一步。 本身。

 php artisan migrate:rollback --step=1 

这里是手册页: docs 。


Laravel 5.2和之前

没有办法没有一些麻烦。 有关详细信息,请查看Martin Bean的答案 。

如果你不能做@Martin Bean所说的话,那么你可以尝试另外一个技巧。

在up()方法中创build一个新的迁移并在该文件中插入想要回滚的迁移的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'); }); } 

然后运行迁移,它会删除表。 如果你再次想要回滚它。

回答这个问题可能有点迟,但这是一个非常好,干净而有效的方法。 我会尽量做到尽可能彻底。

在创build迁移之前,创build不同的目录,如下所示:

  database | migrations | batch_1 batch_2 batch_3 

然后,在创build迁移时,运行以下命令(以您的表格为例):

  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 

上面的命令将使迁移文件在给定的目录path中。 然后你可以简单地运行下面的命令,通过分配的目录来迁移你的文件。

  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 

使用这些技术可以使您更灵活地控制数据库和对模式进行的任何修改。

逐一迁移表。

将要回滚的迁移批次号更改为最高。

运行迁移:回滚。

可能不是处理大型项目最舒适的方式。

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

像这样的东西

如Laravel手册所述 ,您可以使用--step选项回退特定数量的迁移

 php artisan migrate:rollback --step=5