确保迁移回滚所需的细节



对于正确的迁移回滚(通过错误或手动操作),是否需要在迁移中实现特定的事情来确保可以完成?

例如,如果我只有change(),它有更新,它如何知道如何进行回滚?我是否应该实现up()down()以保持一致性并确保回滚功能的完成?

编辑# 1

我认为我应该在之前的提交中说明以下内容。我的change()迁移代码如下:

public function change()
{
//rename values
$this->query("update table_name_here set name_en='new value en' name_fr='new value fr' where id = 7");
...
}

这在这里的文档中提到:

Phinx 0.2.0引入了一个称为可逆迁移的新特性。这个特性现在已经成为默认的迁移方法。对于可逆迁移,您只需要定义向上的逻辑,Phinx就可以为您计算出如何自动向下迁移。例如:

[…]

通过Phinx中的Table API完成以下操作是可逆的,并且会自动反转:

  • 创建表
  • 重命名表
  • 添加列
  • 重命名列
  • 添加索引
  • 添加外键

[…]

如果一个命令不能被逆转,那么Phinx将在向下迁移时抛出一个IrreversibleMigrationException。如果您希望使用一个不能在更改函数中反转的命令,您可以使用If语句和$this->isMigratingUp()来只在向上或向下运行。

https://book.cakephp.org/phinx/0/en/migrations.html the-change-method

因此,如果您的迁移只使用change()方法中可逆的操作,那么您不需要做任何其他操作,Phinx可以自己找出所需的反向命令。

然而,如果你使用的动作不是自动可逆的,要么因为他们没有覆盖,或者因为你没有使用Phinx的表API,但说,例如自定义原始SQL,那么你必须确保自己实现UP/DOWN逻辑,要么使用up()/down()方法而不是change()方法(你不能同时使用),或者通过检查$this->isMigratingUp()change()方法中有条件地运行UP或DOWN逻辑。

最新更新