【问题标题】:Doctrine Migrations in new DB setup新数据库设置中的教义迁移
【发布时间】:2017-03-03 17:12:58
【问题描述】:

我们使用 Doctrine Migrations 来保持应用程序数据库跨版本同步。每次我们获得新客户时都会安装该应用程序,这意味着每次安装都有一个新数据库。

现在,新数据库将在迁移文件中包含所有数据库更改,但将尝试执行迁移文件,因为它们未在迁移表中注册。

处理这种情况的最佳方法是什么?

【问题讨论】:

  • 有人否决了我的问题...我真的很想知道为什么这样我可以改进我的问题。
  • 如果您知道数据库的最后一次更改是什么,您可以手动插入所有版本号或同步一个您作为基本结构保留的数据库(其中包含迁移中的所有版本表),然后为 iets 客户端 tun 运行附加脚本以更新基本数据库
  • @acrobat 感谢您的评论。我正在寻找某种方法来自动化此过程以避免人为(我)的失败:-)
  • 您能否使用迁移在新的空数据库中创建数据库架构?
  • @StuBez 嗯...这可能是一个解决方案...为整个数据库创建迁移而不是使用教义:schema:create... 将提供有关该想法的反馈我试过了。谢谢!

标签: symfony doctrine-orm migration


【解决方案1】:

在全新安装后使用以下命令填充当前架构:

  1. 创建当前版本的新空化学模型

    ./bin/console doctrine:schema:create

  2. 使用当前版本填写迁移记录(无需实际运行迁移 - 在第一个命令之后架构已经具有当前版本)

    ./bin/console doctrine:migrations:version --add --all

此命令会添加迁移记录,doctrine:migrations:status 会告诉您当前版本不需要迁移。

就是这样!

【讨论】:

  • 这听起来很有趣也很简单……这对我来说现在已经不是问题了,但是一旦我有时间我就会研究它是否可行。谢谢彼得。
【解决方案2】:

正如我在评论中提到的,我已经成功地通过使用 Doctrine 迁移创建了一个空白数据库模式。我认为有必要先创建空数据库(php app/console doctrine:database:create),然后运行迁移任务。

我能想到的唯一潜在问题是,您的应用运行所需的任何基础数据要么需要位于迁移文件中,要么需要单独插入。

顺便说一句,一次运行所有迁移会发现一些小错误,我在一次只执行一个时会错过这些错误。

【讨论】:

  • 对于“基础数据”,您可以使用Doctrine Fixtures Bundle
  • 也许这个解决方案的一部分是在为基础数据库运行迁移脚本后加载夹具?
【解决方案3】:

我认为您可以选择第一个迁移类,复制它并在一秒钟前重命名。

因此,如果您的第一个类是2016060712284351,您应该创建一个名为2016060712284350 的新类。这样它就在真正的迁移之前执行。

在这个新创建的类中,您可以设置数据库并创建所有需要的表。这样,当您运行迁移时,首先要做的是创建包含所有表的数据库,然后运行真正的迁移。

无论如何,我不确定这是真正的继续方式。 需要迁移来更新数据库架构,但如果您为每个用户创建一个新数据库,则每个新用户都将根据实体映射拥有新架构。所以不需要迁移。

您只需要为旧用户的数据库运行迁移,对吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多