在使用 phinx
做数据库迁移时如果迁移脚本包含了删除列操作会无法 rollback
,会报 Cannot reverse a "Phinx\Db\Action\RemoveColumn" command
错误。
为了避免这个错误可以在迁移脚本中不使用 change
方法提供的自动合并回滚功能,转而使用 up
和 down
方法,并分别在这两个方法中写入对应合并和回滚的脚本进行手动操作。
示例代码
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class ModifyTableCommentExamplesAddColumns extends AbstractMigration
{
// public function change(): void
// {
// $this->table('comment_examples')
// ->addColumn('column_1')
// ->removeColumn('column_0')
// ->update();
// }
function up(): void
{
$this->table('comment_examples')
->addColumn('column_1')
->removeColumn('column_0')
->update();
// 可以考虑同时加入数据导出脚本用于回滚时可以恢复数据
}
function down(): void
{
$this->table('comment_examples')
->addColumn('column_0')
->removeColumn('column_1')
->update();
}
}
Code language: HTML, XML (xml)