doctrine:generate-migrations-diff不会生成任何新的迁移

时间:2013-06-14 13:41:42

标签: symfony1 doctrine migration symfony-1.4

我今天在schema.yml中做了一些更改后,每个更改后跟diff,migrate,build命令,diff操作停止工作。

最后一次成功的迁移是第243次。

现在,我所做的每一个新变化,当我给出diff命令时,结果总是一样的:

/usr/bin/php /.../symfony --color doctrine:generate-migrations-diff
>> doctrine  generating migration diff
>> file+     /tmp/doctrine_schema_92228.yml
Done.

在lib / migration / doctrine中没有创建新文件,因此我无法使用migrate命令将更改提交给db。

我尝试清除缓存,清理模型文件,构建所有类,然后重新启动。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是我每次遇到迁移和成功的最佳方式。让我付出很多代价但是工作得很好并适用于多个数据库。我在某些句子中可能出错了,所以请随意在你看到的任何内容中添加或纠正我。

MIGRATIONS,最安全的方式:)

如果您需要工作多个数据库的迁移应用这些补丁并清除symfony缓存,它们可以完美地工作:
doctrine_core.r7687
doctrine_manager.r7657

:一种。备份项目和数据库:

  1. 保存Symfony项目文件。 (可选但安全的方式)。
  2. 仅保存数据库表模式。
  3. 仅保存数据库表数据。
  4. 使用数据保存数据库表架构。
  5. <强> B中。如何改变.yml FILES:

    1. .yml个文件不能包含奇怪的符号,例如 ñ ´ ``` ...或非UTF字符..

    2. 始终在Notepad ++或Sublime中显示空格和制表符。没有标签!!

    3. 即使在不同的数据库中,您也可以拥有两个名称相同的模块。永远不要设置两个名称相同的模块,否则会遇到很多问题。

    4. 如果要使用多个数据库,则必须在schema.yml文件的开头指定connection属性:

      connection: doctrine_master
      
    5. 再次使用多个数据库时,必须为具有正确连接的模块设置绑定connection

      Tbtest001:
        connection: doctrine_master
        tableName: tb_test001
      
    6. 在schema.yml中设置正确的变量值并输入: Schema Files Variables, models and types

    7. 使用多个数据库时,每次只注意一个数据库中只有一个schema.yml!

    8. 如果要添加一个与另一个表有关系的新表,建议分两步执行,两次迁移。首先只添加表并进行迁移。然后添加关系并再次迁移。这是最安全的方式。

    9. 您可以在不同的地方使用不同的schemas.yml。

    10. <强>℃。迁移变化:

      1. 安装此插件,因为它具有检查更改的修复和改进: idlDoctrineMigrationPlugin

      2. 为项目的每个数据库创建一个新表。插件需要工作:

        name: migration_version , column: version  (int (11)). (autoincrement=false).
        
      3. 在版本列中,将其值设置为您现在拥有的最新版本。您必须对具有表migration_version的每个数据库执行此步骤:

        UPDATE databasetest.migration_version SET databasetest.migration_version.version='31';
        UPDATE databasetest2.migration_version SET databasetest2.migration_version.version='31';
        
      4. 清除Symfony缓存:

        symfony cc
        
      5. 使迁移有所不同(您需要上面的插件和创建的版本表)

        symfony model:diff > migratediff.log
        
      6. 检查以下文件中最新生成的更改是否正确:

        .\lib\migration\doctrine\XXXXXX_versionXXX.php
        .\data\migration\history\XXXXXXXXXX.yml
        
      7. 通过指定号码继续migration UP !,永远不要让UP!还要记住新参数--connection。现在,如果您应用了上述补丁,它将只迁移正确的数据库:

        symfony doctrine:migrate 32 --connection=doctrine_master > migrateUP.log
        
      8. 重建模型,表单,过滤器,删除旧模型..

        symfony doctrine:build-model
        symfony doctrine:build-forms
        symfony doctrine:build-filters
        symfony doctrine:clean-model-files
        symfony cc
        
      9. 将所有数据库设置为其migration_version表中的最新迁移编号:

        UPDATE databasetest.migration_version SET databasetest.migration_version.version='32';
        UPDATE databasetest2.migration_version SET databasetest2.migration_version.version='32';
        
      10. 可选步骤,如果您想知道迁移后发送到数据库的最新SQL查询:

        symfony doctrine:build-sql [--application[="..."]] [--env="..."]
        
      11. <强> d。链接和文件:

        Correct way to do a migrations diff
        Doctrine migrations fallback
        http://trac.symfony-project.org/ticket/7272
        http://trac.symfony-project.org/ticket/7689
        http://trac.symfony-project.org/ticket/8604
        http://php-opensource-help.blogspot.com/2010/07/how-to-get-connection-from-doctrine-to.html
        http://www.doctrine-project.org/documentation/manual/1_1/en/connections
        http://forum.symfony-project.org/viewtopic.php?t=29361&p=104098

        迁移涉及的主要文件:
        Migration.php,Builder.php,sfTaskMigration.php