0

違いは何ですか

symfony doctrine:generate-migrations-db

symfony doctrine:generate-migrations-models

私は違いに気付くことができません:私はテーブル IN DB、NO schema.yml および NO モデルで試しましたが、どちらも効果がありません。移行は生成されません。

IN DB、GENERATED schema.yml および NO モデルのテーブルを試しましたが、どちらも効果がありません。移行は生成されません。

そして最後に、テーブル IN DB、GENERATED schema.yml および GENERATED モデルで試してみましたが、現在はどちらも同じ移行クラスを生成します:|。

違いがよくわかりません。または、少なくとも、すべてのシナリオを考慮して移行の使用を開始する最良の方法は何ですか: モデルはあるが DB はなく、DB はあるがモデルはありません。

ありがとう。

4

1 に答える 1

2

実行中の1つ以上のテーブルを持つ既存のデータベースを考える

./symfony doctrine:generate-migrations-db

テーブルごとに移行ファイルが作成されます。同様に/lib/model/doctrine、実行中の既存のモデル クラスで満たされたようなディレクトリが与えられた場合、

./symfony doctrine:generate-migrations-models

モデルごとに移行ファイルが作成されます。

データベースにテーブルがあり、schema.yml の内容がある場合とない場合、および にモデルがない場合lib/model/doctrineは、database.yml ファイルにデータベースに正しく接続するための資格情報があることを確認するだけです。

移行ファイルが生成されない問題を理解したら、移行を開始するようなことをします。

  1. を使用して、既存のデータベースから新しいスキーマを生成します./symfony doctrine:build-schema
  2. スキーマ ファイルを手動でクリーンアップし、モデル ファイルに既に存在するリレーションを再確立します (存在する場合)。
  3. 新しい空のデータベースconfig/databases.ymlを指すように再構成する
  4. で移行を構築し./symfony doctrine:generate-migrations-diffます。これにより、スキーマ ファイルに基づいて移行が作成され、(空の)データベースが最新の状態になります
  5. 実行./symfony doctrine:migrateしてエラーを監視します。スキーマ ファイルを修正して修正します。手順 4 で作成した移行を削除します。データベースをフラッシュし、手順 4./symfony doctrine:drop-db && ./symofny doctrine:build-dbに戻ります。スキーマがエラーなしで実行できる移行ファイルのクリーンなセットを生成するまで続行します。
  6. でモデルを再構築します./symfony doctrine:build --model --forms --filters

これで、クリーンなschema.ymlファイル、空のデータベースを最新の状態にできるクリーンな移行、およびschema.ymlファイルとデータベースに直接関連するモデルができました。

データベースに新しい変更を加えたい場合は、次のように簡単になりました

  1. 必要な変更を行いますschema.yml
  2. 走る./symfony doctrine:generate-migrations-diff
  3. 生成された移行を手動で確認する
  4. 実行./symfony doctrine:migrateして、移行がエラーなしで実行されることを確認します
  5. モデル、フォーム、フィルターを再構築する./symfony doctrine:build --model --forms --filters

このプロセスを実行することは、時々イライラすることがありますが、構築するための本当に優れたベースを作成するために一度だけ実行する必要があることです.

于 2012-07-25T13:50:06.503 に答える