5

symfony アプリケーションのデータベースからエンティティ クラスを生成したいと考えています。そこで、次の3つの手順に従いました(既存のデータベースからエンティティを生成する方法から

 1. php app/console doctrine:mapping:convert yml ./src/Acme/BlogBundle/Resources/config/doctrine/metadata/orm --from-database --force

 2. php app/console doctrine:mapping:import AcmeBlogBundle yml

 3. php app/console doctrine:generate:entities AcmeBlogBundle

これら 3 つのコマンドの動作を知るために、. /src/Acme/BlogBu​​ndle/Resources/config/doctrine/metadata/ormからすべてのファイルを削除しました。1 つのテーブルにもう 1 つのフィールドを追加しました。その後、コマンド 2 とコマンド 3 に従いました。

新しいフィールドの変更されたテーブルのエンティティを確認しました。新しいフィールドがエンティティに存在しました。

では、なぜdoctrine:mapping:convertコマンドを使用して既存のデータベースからエンティティを生成する必要があるのでしょうか?

4

3 に答える 3

6

私には3つのコマンドが必要であり、それらの間で異なるため、あなたたちがそこで何を言っているのかよくわかりません。

DB スキーマをイントロスペクトして、必要な symfony ORM ファイルとエンティティを生成する場合は、3 つのコマンドを使用する必要があります。

彼らがしていることは次のとおりです:1)

php app/console doctrine:mapping:convert yml ./src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm --from-database --force

これは、イントロスペクションによって DB からエンティティ マッピング ファイルを構築します。DB 上の各テーブルに対して、これは次の場所に <entity>.orm.yml を生成するだけです。

< proj_folder>/src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm/< entity>.orm.yml

2)

php app/console doctrine:mapping:import < vendor>< bundle_name> annotation**

DB からイントロスペクトされた各テーブルのエンティティ クラスを生成します。

出力:writing /var/www/html/< project_folder>/src/< vendor>/< bundle_name>/Entity/< entity>.php

3)

php app/console doctrine:generate:entities < vendor>< nameBundle>**

これは、すべてのエンティティ クラス プロパティのゲッターとセッターのみを生成します。

于 2012-10-07T22:54:35.803 に答える
4

私が知っていること、およびこの投稿で説明したように、mapping:convert はモデル内のリレーションの名前空間を解決できません。そのため、mapping:import を処理して、最終的なマッピング ファイルを取得する必要があります。mapping:import が処理された後、YourBundle/Resources/config/doctrine/metadata/ormディレクトリを削除できます。

于 2012-08-07T12:50:40.093 に答える
2

エンティティ クラスを生成すると、Doctrine はエンティティ クラスからマッピングをインポートするために必要なすべての情報を取得するのに十分なほどインテリジェントになり、最初のステップで取得したクラス メタデータは必要ありません。メタデータとエンティティ クラスを削除した場合、ステップ 1 を実行せずにステップ 2 を実行することはできません。

于 2012-08-07T07:27:10.030 に答える