说我有a.php
,b.php
,c.php
和d.php
个迁移类文件。如何使用artisan命令回滚到特定的迁移状态,例如b.php
中定义的状态?
答案 0 :(得分:37)
我担心,你不能直接这样做。
您可以: 1,回滚上次迁移操作(所有迁移都在最后一批中运行)
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
命令。
答案 1 :(得分:28)
有一种方法可以通过手动编辑数据库来破解它。在migrations
表中,通过为上次迁移提供不同的批次编号来更改batch
列。请注意它们处于递增顺序,因此请进行相应编辑。这会跟踪哪些迁移是单独应用的。
然后运行artisan:rollback
,它将撤消最后一批“批处理”。
因此,如果你想将它们全部分开,那么从顶部开始并给每个1,2,3,4,5等等......你可以看到它很容易编写脚本,你可以做一个工匠如果您希望分离所有迁移,请执行命令。
答案 2 :(得分:5)
根据我的经验。我从不做迁移:回滚。我通常会创建另一个迁移,它执行我需要的所有更改"撤消/回滚"以前的迁移。
这样,如果您想要回滚2-x后退步骤,您可以灵活处理,您可以创建新的迁移以实现所需的更改,然后通过php artisan migrate运行新的迁移。
答案 3 :(得分: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 //
}
}
正如您所看到的,您可以创建向上和向下调用要恢复的迁移的上下。
这不是理想的,但它是我们能做的。
答案 4 :(得分:3)
使用Laravel 5.3,不需要繁重的脚本。因为它允许回滚给定的迁移次数。
php artisan migrate:rollback --step=1
以下是手册page供参考。
答案 5 :(得分:2)
如果真的想要 - 你可以编写一个查询迁移表的自定义函数,查找你所追踪的文件,并找出回滚的次数 - 然后进行循环'migrate:rollback'直到达到所需的迁移...
答案 6 :(得分:1)
有一种简单而又肮脏的方式:
如果您有迁移a.php
,b.php
和c.php
并希望回滚c
和b
,则只需修改a.php
这样一种方法会出现语法错误......删掉一个分号或其他东西。
因此,当您运行php artisan migrate:rollback
时,它将同时回滚c
和b
,并在a
中停止并显示错误。从那时起,c
和b
的回滚将被视为最后一次迁移操作。
不要忘记在a.php
中修改您故意犯的错误。
答案 7 :(得分:0)
由于Laravel只提供php artisan migrate:rollback来回滚你的迁移脚本,回滚所选迁移脚本的最佳方法是创建一个新的迁移脚本并将脚本放入你的down方法(在你选择的迁移脚本中)到新创建的迁移脚本。 希望这有帮助。
答案 8 :(得分:0)
使用php artisan migrate:rollback命令。
php artisan migrate:rollback
要查看回滚将执行的操作,请使用--pretend选项。
php artisan migrate:rollback --pretend
您还可以指定默认数据库连接以外的数据库连接。
php artisan migrate:rollback --pretend --database=other-one