2016-06-16 9 views
0

Doctrine 2エンティティをサブクラス化して、私が使いたい "ヘルパー"機能を追加しようとしています。Subclass Doctrine 2 entity

namespace Project\Entity; 
class Product 
{ 
    private $name; 
    private $idProductCategory; 
} 

マッピングXMLファイルを介して行われます。

は例えば、これは私の実体です。その後

、私はそれを拡張しよう:

namespace Project\Entity; 
class ProductJSON extends Product { 
    public function toJSON() { 
     /* ... */ 
    } 
} 

私は教義では、このオブジェクトを使用しようとすると:

$a = $entityManager->getRepository('\Project\Entity\ProductJSON'); 

私はProject.Entity名付けた「ませマッピングファイルを取得します。 ProductJSON.dcm.xml "というエラーが発生しました。 私は追加のマッピングをしたくないので、どちらが正しいのですか。

私はDoctrineドキュメントとマップされたスーパークラス(Doctrine: extending entity class)について広範に読んだことがありますが、それはDB感覚でエンティティを拡張するためのものであると理解しています。

私はデータベース/マッピングについて気にしません。アプリケーションでオブジェクトをシームレスに使用するためにエンティティをPHPで拡張したいだけです。

どのようにこの目標を達成するには?

+0

あなたの例は間違っていますか、実際には 'extends Product'ステートメントがありませんか? –

+0

この例ではちょっと欠けています。編集ありがとう。 –

答えて

1

メソッドを追加するためにサブクラスは必要ありません。エンティティクラスにメソッドを追加するだけです。Doctrineは、マッピング情報が添付されていないため、無視します。

など。

class Product 
{ 
    private $name; 
    private $idProductCategory; 

    /* ... */ 

    public function toJSON() { 
     /* ... */ 
    } 
} 
+0

エンティティを移行して再生成するとどうなりますか?私がやったすべての変更を失うだろう、そう? –

+0

「移行して再生成する」とはどういう意味ですか?通常、Doctrineは、あなたのエンティティクラスコードからDBスキーマを生成しますが、あなたの質問を誤解している可能性があります。 – dwytrykus

+0

前述のように、スキーマやデータマッピングにXMLを使用しているので、スキーマを変更してDBを移行し、エンティティを再生成します( 'doctrine:mapping:convert annotation/path-to-src'、 doctrine:generate:entities')私がやったことを失うだろう... –

関連する問題