从字符串到实体的 Doctrine 迁移

Doctrine Migration from string to Entity

我有一个看似简单的任务要执行,我必须将几个 tables 列从字符串转换为新实体(整数 FOREIGN KEY)值。

我有 DB 10 tables,其中有一个名为“app_version”的列,其中 atm 是 VARCHAR 列类型。因为我要进行一些项目重构,所以我想将那些 VARCHAR 列转换为一个新列,其中包含一个表示新映射值的 ID,因此:

V1 -> ID: 1 V2 -> ID: 2

等等

我准备了一个 Doctrine Migration(我使用的是 symfony 3.4),它通过删除旧列并为 AppVersion table 添加新的 id 列来执行转换。 当然,我需要保留我当前的现有数据。

我知道 preUp 和 postUp,但我不知道该怎么做 w/o 对数据库性能的影响太大了。我可以通过 preUp 中的 SELECT 收集数据,将它们存储在一些 PHP 变量中,稍后在 postUp 中使用,将新值写入数据库,但因为我有 10 tables 有很多行这很快就会成为一场灾难。

你们有什么建议我可以应用来使这一切变得顺利和容易吗?

请不要问我为什么现在必须进行此重构并且我没有在第一次正确设置数据库。 :D

创意关键词:交易?批量查询?避免 php 变量存储?写入 sql 文件?一切都会好的

我觉得很蠢,但解决方案要简单得多,我创建了一个自定义迁移,其中包含所有要在一个之后执行的“ALTER TABLE [table_name] DROP app_version”那就是:

UPDATE [table_name] SET app_version_id = 1 WHERE app_version = "V1"