Phinx 无法 rollback 删除列操作解决

  • 2025年4月27日

在使用 phinx 做数据库迁移时如果迁移脚本包含了删除列操作会无法 rollback ,会报 Cannot reverse a "Phinx\Db\Action\RemoveColumn" command 错误。

为了避免这个错误可以在迁移脚本中不使用 change 方法提供的自动合并回滚功能,转而使用 updown 方法,并分别在这两个方法中写入对应合并和回滚的脚本进行手动操作。

示例代码

<?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)

0
希望看到您的想法,请您发表评论x