2012-03-23 7 views
9

Symfony2のマニュアル(http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html)に記載されているように、標準コンソールコマンドを使用してデータベースからエンティティを生成しようとしています。doctrineとsymfony2を使用してデータベースビューからエンティティを生成する方法

php app/console doctrine:mapping:convert --from-database --force yml "src/My/HomeBundle/Resources/config/doctrine/metadata/orm" 
php app/console doctrine:mapping:import MyHomeBundle yml 
php app/console doctrine:generate:entities MyHomeBundle 

この後、すべてのテーブルが正しく生成されます。問題は、これがデータベースビューのエンティティを生成しないことです。私は、例えばSRC /マイ/ HomeBundle /リソース/設定/ドクトリン/メタデータ/ ORMにYMLファイルを自分で追加する場合:

UserInGroup: 
    type: entity 
    table: user_in_group_view 
    fields: 
    id: 
     id: true 
     type: integer 
     unsigned: false 
     nullable: false 
     generator: 
     strategy: IDENTITY 
    userId: 
     type: integer 
     unsigned: false 
     nullable: false 
     column: user_id 
    userGroupId: 
     type: integer 
     unsigned: false 
     nullable: false 
     column: user_group_id 
    lifecycleCallbacks: { } 

php app/console doctrine:generate:entities MyHomeBundleを実行しているとき、私はこの例外を取得:

Notice: Undefined index: My\HomeBundle\Entity\UserInGroup in C:\Users\ThisIsMe\Projects\SymfonyTestProject\vendor\doctrine\lib\Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php line 121 

同様の問題でしたここに投稿されました:How to set up entity (doctrine) for database view in Symfony 2

私はEntityクラスを作成できますが、私はこれを得ることができると私は私のビューを変更する場合、私はエンティティクラスを再生成することができます期待していた。助言がありますか?

答えて

2

これで、ormファイルのみを作成しました。もう2つのステップを実行する必要があります。私は最初から完全なステップをお渡しします。

これを実行する前に、事前に作成したormディレクトリ内のすべてのymlファイルを削除してください。私は

1).php app/console doctrine:mapping:convert yml ./src/My/HomeBundle/Resources/config/doctrine --from-database --force 

    Symfony2 generate entity from Database 

2).php app/console doctrine:mapping:import MyHomeBundle yml 

3).php app/console doctrine:generate:entities MyHomeBundle 

MyHomeBundleは、あなたのバンドル名であると思います

が、これはあなたのお役に立てば幸いです。

+0

これは私の質問で説明した同じ手順であり、これはビュー用ではないすべてのテーブルのエンティティを生成します。差異は、生成されたymlファイルの宛先パスにあります。私はあなたのソリューションを試してみましたが、問題はテーブルをエンティティに変えて解決しません。Doctrine(とSymfony)の初期のバージョンでは、問題なくビューからオブジェクトを生成することができます。 – Kosta

0

同じ問題がありますが、私はymlではなくxmlを使用しますが、同じでなければなりません。お使いのORMエンティティで

チェック名は正しいルート、exemple含まれている場合:私は、データベースからの私のORMを生成するときに名前がそのようなものだったので

<entity name="Myapp\MyrBundle\Entity\MyEntity" table="myentity"> 

を:

<entity name="MyEntity" table="myentity"> 

だから、教義のdidn正しい道を理解していない。

希望ですが、これはあなたを助けるでしょう!

+0

チェックしました。私はそれを考えて、運がなければ別の組み合わせを試みました。とにかくありがとう。 – Kosta

+0

あなたはエンティティUserInGroupを通過できますか? – Snroki

+0

私は自分でエンティティを作成したくないのですが、Doctrineを私のためにしたいと思っています。最後に、エンティティを作成して作業していますが、まだ問題は残ります。 – Kosta

-1

あなたがここに見ることができるように: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html リバースエンジニアリング・プロセスエンティティへのDBからは完全にはまだ実装されていません。

を「教義ツールのドキュメントが言うように、エンジニアリングを始めるために1回のプロセスであり、逆Doctrineは、フィールド、インデックス、および外部キーの制約に基づいて、必要なマッピング情報の約70〜80%を変換することができます。カスケードイベントやライフサイクルイベントなどの関連付けに基づいています。その後、生成されたエンティティに関するいくつかの追加作業が、ドメインモデルspエコフィシティ "

関連する問題