2012-01-05 85 views
0

我需要在我的類中爲DiscriminatorMap製作一個公式,因爲我有很多類,並且我無法對每個類進行區分。單表繼承 - 鑑別器映射

discr可以是類的名稱。

有可能嗎? (帶註釋,xml或其他)

/** 
* @ORM\Entity 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"MidUpperArmCircumference" = MidUpperArmCircumference", "KneeHeight" = "KneeHeight"}) 
*/ 

謝謝。

+0

不認爲有一種方法來自動映射它,對不起 – Inoryy 2012-01-05 15:32:03

+0

= /所以我會區分所有。謝謝! – Munir 2012-01-05 18:15:31

回答

2

我只是離開了DiscriminatorMap註釋和學說自動使用的chield的類名作爲鑑別:

/** 
* @ORM\Entity() 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
*/ 
abstract class AbstractContent 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
} 

/** 
* @ORM\Entity() 
*/ 
class Page extends AbstractContent 
{ 
} 

現在,當我創建一個新Page()學說創建一個AbstractContentPage與一個FK到AbstractContent,並將AbstractContenttype屬性設置爲page

這個完美的,因爲它可以讓你生成儘可能多的子類,即使在沒有你的超類(在我的案例AbstractContent)需要知道它們的其他套件。

但請記住,到目前爲止這還沒有正式記錄。測試與學說ORM 2.3。

+1

這不表現如上所述。它也會在子類表上生成重複的字段 – 2013-10-03 18:51:12

+0

@CarrieKendall你可以向我提供你的類,因爲這仍然可以在我們的項目中正常工作。 – flu 2013-10-07 09:11:35

0

這是一個老問題。學說支持單表繼承相當好。 下面的例子是從official docs

<?php 
namespace MyProject\Model; 

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

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

瞭解更多關於它here