CakePHP3.x数据库迁移插件:有没有办法更改表字段


CakePHP 3.x Database Migration Plugin: Is there a way to Change a table field?

我正试图找出如何最好地使用CakePHP迁移插件修改MySQL表的现有列。我不需要添加或删除列,我只想修改字符串列的长度。

当前,该列被定义为varchar(50);我正在重新调整专栏的用途,并希望将其定义为varchar(2000)

迁移的目标是成为在典型web服务器上安装标准CakePHP web应用程序的自动化部署的一部分。

据我所知,使用迁移插件实现这一点的唯一方法(除了ALTER语句)似乎是:

  1. 重命名列
  2. 添加新列
  3. 将现有数据移动/复制到新列
  4. 删除旧列

也许我错过了文档和无数教程中的讨论,以及如何找到更好的方法来实现这一点,但这似乎是一种繁琐且弄巧成拙的方法。

我已经阅读了CakePHP迁移插件的文档和Phinx的文档,但没有看到推荐的更改方法。我感谢您对此提供的任何意见。

不幸的是,Phinx文档并不完整,似乎有各种未记录的方法,比如您正在寻找的方法:'Phinx'Db'Table::changeColumn()

  • https://github.com/robmorgan/phinx/blob/v0.4.6/src/Phinx/Db/Table.php#L392
  • https://github.com/robmorgan/phinx/issues/682

以下内容应适用于

$table = $this->table('table_name');
$table->changeColumn('column_name', 'string', [
    'limit' => 2000
]);
$table->update();