laravel 4 artisan - 如何回滚到特定的迁移状态?

do.*_*do. 23 php migration laravel laravel-4

说我有a.php,b.php,c.phpd.php移民类文件.如何b.php使用artisan命令回滚到特定的迁移状态,例如在其中定义的状态?

And*_*yco 37

我很害怕,你不能直接这样做.

您可以:1,回滚上次迁移操作(所有迁移都在最后一批中运行)

php artisan migrate:rollback
Run Code Online (Sandbox Code Playgroud)

2,回滚所有迁移

php artisan migrate:reset
Run Code Online (Sandbox Code Playgroud)

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

php artisan migrate:refresh  
php artisan migrate:refresh --seed
Run Code Online (Sandbox Code Playgroud)

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

  • 要修改我上面的评论 - 如果你有很多表等的大型迁移,并运行`migrate:rollback`,它将回滚上次迁移的所有操作,而不仅仅是最后一个操作.我错误地认为它只会回滚最后一个动作,而不是整个迁移. (3认同)
  • 从 5.3 开始(在发布此答案后发布),您可以设置要回滚的步骤数,例如 php artisan migrate:rollback --step=5,如您所见:https://laravel.com /docs/5.3/migrations#rolling-back-migrations 。@Yauheni Prakopchyk 在下面提到了它。 (2认同)

小智 28

有一种方法可以通过手动编辑数据库来破解它.在migrations表中,batch通过为上次迁移提供不同的批次编号来更改列.请注意它们处于递增顺序,因此请进行相应编辑.这会跟踪单独应用的迁移.

然后运行artisan:rollback它将撤消最后一个"批处理".

因此,如果你想将它们全部分开,那么从顶部开始并给每个1,2,3,4,5等等...你可以看到它很容易编写脚本,你可以做一个工匠命令如果你希望将所有迁移分开.

  • 这是更好的解决方案imo,很好的黑客! (3认同)

小智 5

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

这样,如果您想要回滚2-x步骤,您可以灵活处理,您可以创建新的迁移以实现所需的更改,然后通过php artisan migrate运行新的迁移.


Yau*_*hyk 5

拉拉维尔 5.3

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

php artisan migrate:rollback --step=1
Run Code Online (Sandbox Code Playgroud)

这是供参考的手册