2

在我今天在我的 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 命令将更改提交到数据库。

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

有任何想法吗?

4

1 回答 1

3

这是我遇到的每次迁移和成功的最佳方式。花了我很多时间去猜测,但可以完美地工作并且可以与多个数据库一起使用。我在某些句子中可能是错误的,因此请随时在您看到的任何内容中添加或更正我。

迁移,最安全的方式:)

如果您需要为多个数据库工作迁移应用这些补丁并清除 symfony 缓存,它们可以完美
运行

A. 备份项目和数据库:

  1. 保存 Symfony 项目文件。(可选但安全的方式)。
  2. 仅保存数据库表模式。
  3. 仅保存数据库表数据。
  4. 使用数据保存数据库表架构。

B. 如何更改 .yml 文件:

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

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

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

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

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

    Tbtest001:
      connection: doctrine_master
      tableName: tb_test001
    
  6. 在 schema.yml 中设置正确的变量值和类型: 模式文件 变量、模型和类型

  7. 使用多个数据库,每次只为一个数据库注意和修改一个 schema.yml!

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

  9. 你可以在不同的地方有不同的 schemas.yml。

C. 迁移更改:

  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!,永远不要迁移!。还要记住新参数--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="..."]
    

D. 链接和文件:

迁移差异的正确方法
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/文档/手册/1_1/en/connections
http://forum.symfony-project.org/viewtopic.php?t=29361&p=104098

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

于 2013-06-26T11:36:46.637 回答