gpt4 book ai didi

symfony1 - Doctrine :generate-migrations-diff 不会产生任何新的迁移

转载 作者:行者123 更新时间:2023-12-04 04:53:14 25 4
gpt4 key购买 nike

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

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

有任何想法吗?

最佳答案

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

迁移,最安全的方式 :)

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

A. 备份项目和数据库:

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

  • B. 如何更改 .yml 文件:
  • .yml文件不能包含奇怪的符号,例如 ñ , ´ , ```... 或非 UTF 字符..
  • 始终在 Notepad++ 或 Sublime 中显示空格和制表符。不能有标签!!
  • 即使在不同的数据库中,您也不能有两个具有相同名称的模块。永远不要设置两个同名的模块,否则你会遇到很多问题。
  • 如果要使用多个数据库,则必须指定 connection schema.yml 文件开头的属性:

    connection: doctrine_master
  • 使用多个数据库,您必须再次设置绑定(bind) connection对于具有正确连接的模块:

    Tbtest001:
    connection: doctrine_master
    tableName: tb_test001
  • 在 schema.yml 中设置正确的变量值和类型:
    Schema Files
    Variables, models and types
  • 使用多个数据库,每次只为一个数据库注意和修改一个 schema.yml!
  • 如果要添加与另一个表有关系的新表,建议分两步进行,两次迁移。首先只添加表并迁移。然后添加关系并再次迁移。这是最安全的方式。
  • 你可以在不同的地方有不同的 schemas.yml。

  • C. 迁移更改:
  • 安装此插件,因为它具有检查更改的修复和改进:
    idlDoctrineMigrationPlugin
  • 为您的项目的每个数据库创建一个新表。插件工作所需的:

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

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

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

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

    .\lib\migration\doctrine\XXXXXX_versionXXX.php
    .\data\migration\history\XXXXXXXXXX.yml
  • 继续 migration UP通过指定一个数字!,永远不要迁移!。还要记住新参数--connection。如果您应用了上述补丁,它现在可以工作并且它只会迁移正确的数据库:

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

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

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

    symfony doctrine:build-sql [--application[="..."]] [--env="..."]

  • 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

    关于symfony1 - Doctrine :generate-migrations-diff 不会产生任何新的迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109892/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com