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 キャッシュをクリアすると、完全に機能します:
doctrine_core.r7687
doctrine_manager.r7657

A. バックアップ プロジェクトとデータベース:

  1. Symfony プロジェクト ファイルを保存します。(オプションですが安全な方法)。
  2. データベース テーブル スキーマのみを保存します。
  3. データベース テーブル データのみを保存します。
  4. データベース テーブル スキーマをデータとともに保存します。

B. .yml ファイルを変更する方法:

  1. .ymlファイルにはñ、 、´``` ... などの奇妙な記号や非 UTF 文字を含めることはできません。

  2. Notepad++ または Sublime では常にスペースとタブを表示します。タブはあり得ません!!

  3. 異なるデータベースであっても、同じ名前のモジュールを 2 つ持つことはできません。同じ名前の 2 つのモジュールを設定しないでください。多くの問題が発生します。

  4. connection複数のデータベースを操作する場合は、schema.yml ファイルの先頭で属性を指定する必要があります。

    connection: doctrine_master
    
  5. 複数のデータベースを操作する場合もconnection、適切な接続でモジュールのバインドを設定する必要があります。

    Tbtest001:
      connection: doctrine_master
      tableName: tb_test001
    
  6. schema.yml で正しい変数の値と型を設定する: スキーマ ファイル 変数、モデル、および型

  7. 複数のデータベースで作業する場合は、注意して、毎回 1 つのデータベースに対して 1 つの schema.yml のみを変更してください。

  8. 別のテーブルへのリレーションを含む新しいテーブルを追加する場合は、2 つのステップ、つまり 2 つの移行で行うことをお勧めします。最初にテーブルを追加して移行するだけです。次に、リレーションを追加して、再度移行します。最も安全な方法です。

  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て続行してください!、決して移行を 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 移行フォールバック
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

于 2013-06-26T11:36:46.637 に答える