a.php
、b.php
、c.php
和 d.php
这四个迁移类文件。如何使用 Artisan 命令回滚到特定的迁移状态,例如回滚到 b.php
中定义的状态?a.php
、b.php
、c.php
和 d.php
这四个迁移类文件。如何使用 Artisan 命令回滚到特定的迁移状态,例如回滚到 b.php
中定义的状态?很抱歉,您不能直接这样做。
您可以: 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
命令。
php artisan migrate:rollback
看起来现在会回滚您的所有迁移。 - Vigsmigrate:rollback
命令,它将回滚自上一个迁移以来的所有操作,而不仅仅是最后一个操作。我之前错误地认为它只会回滚最后一项操作,而不是整个迁移过程。 - Vigs有一种方法可以通过手动编辑数据库来进行黑客攻击。在 migrations
表格中,通过为最后一个迁移指定不同的批次号码来更改 batch
列。请注意,它们是按递增顺序排列的,因此需要相应地进行编辑。这将跟踪单独应用了哪些迁移。
然后运行 artisan:rollback
命令,它将撤消上一个 "batch"。
所以,如果您想将它们全部分开,请从顶部开始,依次为每个迁移编号为1、2、3、4、5等等... 您可以看到它很容易编写脚本,并且如果您希望将所有迁移分开,则可以制作一个 artisan 命令。
根据我的经验,我从未使用过migrate:rollback。通常我会创建另一个迁移文件,以执行所有需要“撤消/回滚”之前迁移所做更改的操作。
这样你就可以灵活地回滚2-x步,只需创建一个新的迁移文件来实现你想要的更改,然后通过php artisan migrate运行新的迁移文件即可。
Laravel 5.3使得编写代码变得轻松。它允许回滚指定数量的迁移操作,无需进行繁琐的脚本编写。
php artisan migrate:rollback --step=1
以下是参考手册页面。
事实上,这个功能目前还没有(出现)。令人惊讶的是。
最好的想法是创建一个名为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 //
}
}
正如您所看到的,您可以创建向上和向下的迁移,以调用您想要还原的那些迁移的向上和向下操作。
虽然不是理想的解决方案,但这是我们能做的。
如果你真的想要的话,你可以编写一个自定义函数来查询迁移表,寻找所需的文件,并计算需要回滚的次数,然后循环执行'migrate:rollback'直到达到所需的迁移...
有一种简单但不太好的方法:
如果您有迁移文件 a.php
、b.php
和 c.php
,并希望回滚 c
和 b
,您可以简单地修改 a.php
,使其出现语法错误... 比如漏掉一个分号或其他什么。
因此,当您运行 php artisan migrate:rollback
时,它将回滚 c
和 b
,并在 a
中停止并报错。从那时起,对 c
和 b
的回滚将被视为最后一次迁移操作。
别忘了修复您故意在 a.php
中制造的错误。
php artisan migrate:rollback
为了查看回滚的效果,请使用 --pretend 选项。
php artisan migrate:rollback --pretend
您还可以指定一个与默认数据库连接不同的数据库连接。
php artisan migrate:rollback --pretend --database=other-one
由于Laravel只提供了php artisan migrate:rollback来回滚您的迁移脚本,因此回滚所选的迁移脚本的最佳方法是创建一个新的迁移脚本,并将该脚本放在您选择的迁移脚本的down方法中,以便将其迁移到新创建的迁移脚本中。 希望这可以帮助到您。