Symfony2 doctrine2迁移脚本到表而不是文件

时间:2015-08-04 15:52:49

标签: symfony doctrine-orm migration

我正在使用doctrine:migrations:diff来准备数据库演变。

此命令将文件创建到app / DoctrineMigrations中 Thoses文件包含sql命令,以便升级或降级数据库结构。

我想将这些sql命令存储到数据库本身。事实上,我有几个数据库实例。如果sql命令存储到文件中,那么这是一个很大的问题。

我在某处读过DoctrineMigrations捆绑包可以创建一个名为“migration_versions”的表,但是我无法找到我在哪里读到这个...

1 个答案:

答案 0 :(得分:2)

我无法理解你想要做什么。

当您的代码需要更改数据库结构时,将使用迁移。例如,新表或新列。对表或列的这些新要求来自您新编写的代码,因此将迁移也作为代码存储在存储库中是很自然的。

迁移如何以及何时进入您的数据库?您如何保证在代码更改之前执行迁移(使用该新结构?

通常,迁移以这种方式使用:

  • 您开发代码,添加新功能,更改现有功能。您的代码需要更改数据库。
  • 您生成了doctrine迁移类,其中包含当前数据库所需的SQL语句以进入所需的状态。
  • 您更改了添加任何必需SQL语句的类。例如,UPDATE语句用于迁移数据,而不仅仅是结构。
  • 您在本地执行迁移。
  • 您可以使用数据库更改来测试代码。如果需要进行更多更改,可以添加新迁移,也可以执行向下迁移,删除并重新生成。永远不要更改迁移类,因为你将丢失数据库中应该包含的内容,而不是什么。
  • 您将迁移与使用它的代码一起提交。

然后是部署部分: - 对于每个服务器,上传代码,清除和预热缓存,运行其他安装脚本。然后运行迁移。然后才切换到新代码。

这样,您的数据库始终与使用该数据库的服务器中的当前代码同步。

migration_versions数据库表由doctrine迁移自动创建。它只包含迁移类的版本号 - 它用于跟踪哪些迁移已经运行,哪些迁移没有。

这样,当您运行doctrine:migrations:migrate时,将执行所有尚未运行的迁移。这允许一次迁移少量提交,在提交中进行多次迁移等。