26

假设我有, 和a.php迁移b.php类文件。如何回滚到特定的迁移状态,例如使用 artisan 命令定义的状态?c.phpd.phpb.php

4

9 回答 9

39

恐怕,你不能直接这样做。

您可以: 1、Rollback The Last Migration Operation(所有迁移在最后一批中运行)

php artisan migrate:rollback

2、回滚所有迁移

php artisan migrate:reset

3、回滚所有迁移并再次运行它们

php artisan migrate:refresh  
php artisan migrate:refresh --seed

在您的情况下,修改 b.php 及其up()方法,然后执行artisan migrate:refresh命令。

于 2013-07-17T10:30:35.143 回答
28

有一种方法可以通过手动编辑数据库来破解它。在表中,通过给最后一次迁移一个不同的批号来migrations更改列。batch请注意,它们是按递增顺序排列的,因此请相应地进行编辑。这会跟踪单独应用了哪些迁移。

然后运行artisan:rollback,它将撤消最后一个“批处理”。

因此,如果您想将它们全部分开,则从顶部开始并分别给出 1,2,3,4,5 等等...您可以看到它很容易编写脚本,如果您可以制作一个工匠命令希望分离所有迁移。

于 2013-09-12T09:11:43.250 回答
5

在我的经验中。我从不迁移:回滚。我通常会创建另一个迁移,它会执行“撤消/回滚”以前的迁移所需的所有更改。

这样,如果您想回滚 2-x 步,您可以灵活,您可以创建一个新的迁移来实现您想要的更改,然后通过 php artisan migrate 运行新的迁移。

于 2014-07-02T01:10:24.830 回答
4

拉拉维尔 5.3

使用 Laravel 5.3,无需编写繁重的脚本。因为它允许回滚给定数量的迁移。

php artisan migrate:rollback --step=1

这是供参考的手册页。

于 2016-06-13T16:53:08.587 回答
3

事实上,(还)没有这个功能。出奇

最好的办法是创建一个新文件 backtob.php 并使其向上调用您的其他迁移文件。为避免复制和粘贴,您可以执行以下操作:

class BacktoB {
  public function up () {
     // the database is in the after D state //
     $migrateD = new D();
     $migrateD->down();
     // the database is in the after C state //
     $migrateC = new C();
     $migrateC->down();
     // the database is in the before C state //
     // before C = B //
  }
  public function down () {
     // the database is in the B state //
     $migrateC = new C();
     $migrateC->up();
     // the database is in the after C state //
     $migrateD = new D();
     $migrateD->up();
     // the database is in the after D state //
  }
}

如您所见,您可以创建 up 和 down 调用这些迁移的 up 和 down 来恢复您想要恢复的内容。

这不是理想,但这是我们可以做的。

于 2015-03-13T19:29:48.247 回答
2

如果你真的想要——你可以编写一个自定义函数来查询迁移表,查找你所追求的文件,并计算出回滚的次数——然后执行一个“迁移:回滚”循环,直到你到达需要迁移...

于 2013-07-17T11:57:18.927 回答
1

有一个简单但肮脏的方法:

如果您有迁移a.phpb.php并且c.php想要回滚cand b,您可以简单地修改a.php为会出现语法错误...删除分号或其他内容。

因此,当您运行时,php artisan migrate:rollback它会回滚cb并停止并在a. 从那时起,回滚cb将被视为最后一次迁移操作。

不要忘记修复您故意在a.php.

于 2015-09-28T14:09:18.153 回答
0

由于 Laravel 仅提供 php artisan migrate:rollback 来回滚您的迁移脚本,因此回滚您选择的迁移脚本的最佳方法是创建一个新的迁移脚本并将脚本放入您的 down 方法(在您选择的迁移脚本上)到新创建的迁移脚本。希望这有帮助。

于 2014-04-03T08:03:59.373 回答
0

使用 php artisan migrate:rollback 命令。

php artisan migrate:rollback

要查看回滚会做什么,请使用 --pretend 选项。

php artisan migrate:rollback --pretend

您还可以指定默认连接以外的数据库连接。

php artisan migrate:rollback --pretend --database=other-one
于 2017-11-17T06:10:08.340 回答