我们正在使用 Doctrine Migrations 来保持应用程序数据库跨版本同步。每次我们获得新客户时都会安装该应用程序,这意味着每次安装都有一个新数据库。
现在,新数据库将在迁移文件中包含所有数据库更改,但将尝试执行迁移文件,因为它们未在迁移表中注册。
处理这种情况的最佳方法是什么?
我们正在使用 Doctrine Migrations 来保持应用程序数据库跨版本同步。每次我们获得新客户时都会安装该应用程序,这意味着每次安装都有一个新数据库。
现在,新数据库将在迁移文件中包含所有数据库更改,但将尝试执行迁移文件,因为它们未在迁移表中注册。
处理这种情况的最佳方法是什么?
在全新安装以填充当前架构后,使用以下命令:
创建当前版本的新空 chema
./bin/console doctrine:schema:create
使用当前版本填写迁移记录(无需实际运行迁移 - 在第一个命令之后架构已经具有当前版本)
./bin/console doctrine:migrations:version --add --all
此命令会添加迁移记录,doctrine:migrations:status
并将显示当前版本不需要迁移。
就这样!
正如我在评论中提到的,我已经成功地通过使用 Doctrine 迁移创建了一个空白数据库模式。我认为有必要先创建空数据库(php app/console doctrine:database:create
)然后运行迁移任务。
我能想到的唯一潜在问题是,您的应用程序运行所需的任何基础数据要么需要位于迁移文件中,要么需要单独插入。
顺便说一句,一次运行所有迁移会发现一些我在一次只执行一个时错过的小错误。
我认为您可以选择第一个迁移类,复制它并在一秒钟前重命名。
因此,如果您的第一堂课是2016060712284351
您应该创建一个名为2016060712284350
. 这样它就在真正的迁移之前执行。
在这个新创建的类中,您设置数据库创建所有需要的表。这样,当您运行迁移时,首先要做的是创建包含所有表的数据库,然后运行真正的迁移。
无论如何,我不确定这是继续进行的真正方法。需要迁移来更新数据库架构,但如果您为每个用户创建一个新数据库,则每个新用户都将根据实体映射拥有新架构。所以不需要迁移。
您只需要为老用户的数据库运行迁移,对吗?