2017-08-09 11 views
1

私はSymfony 3を学んでおり、移行を作成してデータベース移行で変更されたスキーマに基づいてエンティティを再生成する最良の方法が何であるかを知りたいと思います。現時点でSymfony 3エンティティの移行と再生成に最適な方法

、私がやったことはこれです: このバンドルをインストールします。

"doctrine/doctrine-migrations-bundle": "^1.0" 

は、Windowsのコマンドラインで私のdoctrine.orm.ymlファイル

のフィールドを変更し、私が書いた:

php bin/console doctrine:migrations:diff 

次に

php bin/console doctrine:migrations:migrate 

これで、「migration-versions」という新しいテーブルと同じ名前の新しいエンティティが作成されました。

私の問題は、変更されたエンティティに古いデータが残っていることです。新しい移行でこの特定のエンティティを更新したいのですが、ここで私は立ち往生しています。

手動で削除してコマンドラインで入力してもよろしいですか?

php bin/console doctrine:generate:entities AppBundle 

はあなたの助けをいただき、ありがとうございます。

+0

テーブルのエンティティを作成しましたか? –

+0

私が理解しているように、あなたはデータを失いたくはありません。実際には、必要な処理を実行し、緊急時にロールバックする方法を維持するように、移行を改善する必要があります。あなたがどのような変化をしているのかを記述すると、私は助けようとします。 – Vladislav

答えて

1

まず、移行はデータベースにのみ影響します。 migrations_versionsは内部テーブルで、Symfonyストアの情報です。このテーブルについて気にする必要はありません。

移行のワークフローは、このようなものです:あなたは、あなたのマッピング(EntityName.orm.yml)

  • 実行doctrine:generate:entities AppBundle:EntityNameを(これは新しいフィールドを使用してエンティティを作成します)に変更

    1. DBへの変更を永続化するために実行doctrine:migrations:diff(これは自動的に違いをチェックし、あなたのDBに影響する移行を作成します)
    2. 実行doctrine:migrations:migrate

    doctrine:generate:entitiesの生成エンティティは、マイグレーションの概念とは関係ありません(phpオブジェクトのdbテーブルのマッピング)。

    エンティティを生成するときSymfonyは新しいフィールド(EntityName.orm.ymlから)を検出し、それらのセッター/ゲッターをEntityクラスに添付します。 SimfonyはEntityクラスから古いものを削除しません。独自のロジックをそこに追加することができますし、コマンド実行後に削除したくないからです。それらを削除する場合は、手動で行うか、そこにロジックを追加しなかった場合は、ファイルを削除してdoctrine:generate:entitiesを再実行してください。

    希望すると助かります!

  • 関連する問題