确保迁移回滚所需的细节

Required specifics to ensure migration rollback

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

例如,如果我只有 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 introduced a new feature called reversible migrations. This feature has now become the default migration method. With reversible migrations, you only need to define the up logic, and Phinx can figure out how to migrate down automatically for you. For example:

[...]

The following actions are reversible when done through the Table API in Phinx, and will be automatically reversed:

  • Creating a table
  • Renaming a table
  • Adding a column
  • Renaming a column
  • Adding an index
  • Adding a foreign key

[...]

If a command cannot be reversed then Phinx will throw an IrreversibleMigrationException when it’s migrating down. If you wish to use a command that cannot be reversed in the change function, you can use an if statement with $this->isMigratingUp() to only run things in the up or down direction.

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

因此,如果您的迁移仅使用 change() 方法中可逆的操作,那么您无需执行任何其他操作,Phinx 可以自行计算出所需的反转命令。

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