2012-02-29 326 views
1

是否有可能有一個PHP類,它擴展了一個學說實體並堅持下去?學說堅持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和它的映射,必須明確定義,以及(如果子類增加了額外的屬性)。

繼承映射的最常見的形式是單表繼承,這裏是從教義手冊這樣的映射的例子:

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 2012-03-01 10:01:50

+0

「父類中的關聯」是什麼意思?請舉個例子! – Benjamin 2012-03-01 18:28:41

+0

我編輯我的示例 – Charles 2012-03-08 10:58:48