Symfony2 doctrine2 迁移脚本到 table 而不是文件
Symfony2 doctrine2 migration script into table instead of file
我正在与 doctrine:migrations:diff 合作以准备数据库演化。
此命令将文件创建到 app/DoctrineMigrations
这些文件包含 sql 命令以升级或降级数据库结构。
我想将那些 sql 命令存储到数据库本身中。事实上,我有几个数据库实例。如果sql命令存储到文件中,这是一个大问题。
我在某处读到 DoctrineMigrations 包可以创建一个名为 "migration_versions" 的 table,但我没能找到我在哪里读过这个...
我真的不明白你想做什么。
当您的代码需要更改数据库结构时使用迁移。例如,新 table 或新列。 table 或列的这些新要求来自您新编写的代码,因此将迁移也作为代码放置在您的存储库中是很自然的。
迁移将如何以及何时到达您的数据库?您如何保证迁移是在使用新结构的代码更改之前执行的?
迁移一般是这样使用的:
- 您开发代码、添加新功能、更改现有功能。您的代码需要更改数据库。
- 您生成原则迁移 class,其中包含当前数据库达到所需状态所需的 SQL 语句。
- 您更改 class 添加任何更多必需的 SQL 语句。例如,
UPDATE
语句迁移您的数据,而不仅仅是结构。
- 您在本地执行迁移。
- 您使用数据库更改测试您的代码。如果你需要更多的变化,你要么添加新的迁移,要么向下执行迁移,删除它并重新生成它。切勿更改迁移 class,因为您会丢失数据库中应该有的内容和不应该有的内容。
- 您提交迁移以及使用它的代码。
然后是部署部分:
- 对于每个服务器,上传代码,清除和预热缓存,运行 其他安装脚本。然后 运行 迁移。然后才切换到新代码。
这样您的数据库将始终与使用该数据库的服务器中的当前代码同步。
migration_versions
数据库 table 由学说迁移自动创建。它仅包含迁移的版本号 classes - 它用于跟踪哪些迁移已经 运行 哪些不是。
这样,当您 运行 doctrine:migrations:migrate
所有尚未 运行 的迁移都会被执行。这允许一次迁移几个提交,在一个提交中进行多个迁移等。
我正在与 doctrine:migrations:diff 合作以准备数据库演化。
此命令将文件创建到 app/DoctrineMigrations 这些文件包含 sql 命令以升级或降级数据库结构。
我想将那些 sql 命令存储到数据库本身中。事实上,我有几个数据库实例。如果sql命令存储到文件中,这是一个大问题。
我在某处读到 DoctrineMigrations 包可以创建一个名为 "migration_versions" 的 table,但我没能找到我在哪里读过这个...
我真的不明白你想做什么。
当您的代码需要更改数据库结构时使用迁移。例如,新 table 或新列。 table 或列的这些新要求来自您新编写的代码,因此将迁移也作为代码放置在您的存储库中是很自然的。
迁移将如何以及何时到达您的数据库?您如何保证迁移是在使用新结构的代码更改之前执行的?
迁移一般是这样使用的:
- 您开发代码、添加新功能、更改现有功能。您的代码需要更改数据库。
- 您生成原则迁移 class,其中包含当前数据库达到所需状态所需的 SQL 语句。
- 您更改 class 添加任何更多必需的 SQL 语句。例如,
UPDATE
语句迁移您的数据,而不仅仅是结构。 - 您在本地执行迁移。
- 您使用数据库更改测试您的代码。如果你需要更多的变化,你要么添加新的迁移,要么向下执行迁移,删除它并重新生成它。切勿更改迁移 class,因为您会丢失数据库中应该有的内容和不应该有的内容。
- 您提交迁移以及使用它的代码。
然后是部署部分: - 对于每个服务器,上传代码,清除和预热缓存,运行 其他安装脚本。然后 运行 迁移。然后才切换到新代码。
这样您的数据库将始终与使用该数据库的服务器中的当前代码同步。
migration_versions
数据库 table 由学说迁移自动创建。它仅包含迁移的版本号 classes - 它用于跟踪哪些迁移已经 运行 哪些不是。
这样,当您 运行 doctrine:migrations:migrate
所有尚未 运行 的迁移都会被执行。这允许一次迁移几个提交,在一个提交中进行多个迁移等。