2012-02-29 16 views
1

doctrineエンティティを拡張して永続化するphpクラスを持つことは可能ですか?doctrine doctrineエンティティを継承するphpクラス

例:

/** 
* @Entity 
*/ 
class A { 
    /** 
    * @ORM\ManyToMany(targetEntity="C", mappedBy="parents") 
    */ 
    protected $children; 
} 

class B extends A { 
... 
} 

class C { 
    /** 
    * @ORM\ManyToMany(targetEntity="A", inversedBy="children") 
    */ 
    protected $parents; 
} 

$b = new B(); 
$em->persist($b); 

答えて

3

はい、これはinheritance mappingと呼ばれ、可能だが、子クラスは、明示的に@Entityとして宣言する必要があり、そのマッピングは、子クラスが余分に追加した場合、明示的に(同様に定義する必要がありますプロパティ)。

継承マッピングの最も一般的な形式は、ここで、単一テーブル継承でDoctrineのマニュアルから、このようなマッピングの例である:あなたの答えのための

namespace MyProject\Model; 

/** 
* @Entity 
* @InheritanceType("SINGLE_TABLE") 
* @DiscriminatorColumn(name="discr", type="string") 
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"}) 
*/ 
class Person 
{ 
    // ... 
} 

/** 
* @Entity 
*/ 
class Employee extends Person 
{ 
    // ... 
} 
+0

感謝:)残念ながら、私たちがいるので、継承マッピングを使用することはできません親クラスへの関連付けが必要です。継承マッピングは親クラスの関連付けではうまくいかない... – Charles

+0

"親クラスの関連付け"とはどういう意味ですか?例を挙げてください! – Benjamin

+0

私の例を編集します – Charles

関連する問題