我在symfony 2项目中使用Doctrine的迁移来安全地迁移我的数据库。大多数时候它都是关于添加列的,但有时我会拆分列(因为规范化)或者我改变了相关性(一对一 - >一对多)。
创作本身很简单。但删除或重命名旧列/属性不是。只有当数据从旧格式转换为新格式时,才会发生这种情况。
当前情况:具有一个标记的任务实体
未来情况:具有一对多标签的任务实体
我在迁移脚本中尝试了preUp / postUp函数。 伪代码:
Fetch Tasks
Foreach Tasks as Task
$tag = new Tag();
$tag->setName($task->getTag());
persist
$task->setNewtag($tag);
persist
flush
在第二个迁移脚本中,我可以安全地删除旧的Tag列,并将Newtag重命名为Tag。
当我--dry-运行脚本时,SQL命令不会被执行(ofcourse),而是“转换”#。脚本是因为列不存在而导致错误。
如何克服此错误?我可以截取SQL脚本的结果,只在SQL结果为真时执行转换吗?