从Doctrine迁移获取SQL

从Doctrine迁移获取SQL

问题描述:

我一直在研究一种获取生成的迁移文件构建的SQL语句的方法。这些扩展了Doctrine_Migration_Base。本质上,我想将SQL保存为更改脚本。从Doctrine迁移获取SQL

执行路径将我引向Doctrine_Export,它具有构建SQL语句并执行它们的方法。我找不到要求他们的方法。 Doctrine_Export中的导出方法只能在Doctrine_Record模型上运行,而不能在Migration脚本中运行。

在命令行 './doctrine迁移版本#' 的道路是:

  • Doctrine_Cli ::运行(CMD)
  • Doctrine_Task_Migrate :: setArguments(参数)
  • Doctrine_Task_Migrate ::执行()
  • Doctrine_Migration ::迁移(至)
  • Doctrine_Migration_Process :: Doctrine_Export ::各种 创建,删除,改变与SQL 球菌方法valents。

有没有人解决过这个问题?我真的不想改变Doctrine基础文件。任何帮助是极大的赞赏。

考虑到罗布·法利的建议,我修改:

  • Doctrine_Core ::迁移
  • Doctrine_Task_Migrate ::执行

当执行方法被调用的可选参数 'DRYRUN' 是检查。如果为真 则创建一个'Doctrine_Connection_Profiler'实例。 'dryRun'值然后传递到'Doctrine_Core :: migrate'方法的 。 true的'dryRun'值允许在完成执行SQL语句时回滚的更改。当方法返回时,分析器将被解析,并且不包含'migration_version'的非空SQL语句 被保存并显示给终端。

你可以制作一个开发服务器,然后进行迁移,随时存储一个SQL Trace?你不必保留结果,但是你会得到每个命令的列表。

+0

有趣。我会研究并回复你。我觉得我可能不得不修改基本的Doctrine文件,因为它们的CLI实现缺乏。有一个dryRun选项,Doctrine_Task_Migrate甚至不打扰检查。 基本上我选择的两个选项是: 添加dryRun选项,使用dryRun和SQL Trace运行迁移以捕获语句。 或 与dryRun选项一起,添加另一个选项以仅输出 SQL语句,这需要修改Doctrine_Migration_Process文件,也许我会将其称为Doctrine_Migration_GetSQL。 – 2010-01-24 19:22:04

+0

声音有效。当然,SQL Trace是获取命令的好方法。 – 2010-01-24 21:28:20