2013-08-27 28 views
1

我有一個稱爲Divers的抽象父類,它被其他幾個類擴展。
因此,我使用繼承映射與D2使用單表繼承策略。與Doctrine2加入表中的鑑別器

namespace MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* ParentClass 
* 
* @ORM\Table(name="PARENTCLASS") 
* @ORM\Entity 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="idtable", type="string") 
* @ORM\DiscriminatorMap({ 
*  "CHILD-CLASS1" = "ChildClassOne", 
*  "CHILD-CLASS2" = "ChildClassTwo", 
*  "CHILD-CLASS3" = "ChildClassThree", 
*  "CHILD-CLASS4" = "ChildClassFour" 
* }) 
*/ 
abstract class ParentClass 
{ 
    ... 
} 

我想要實現的是在瀏覽器中顯示鑑別器,並附帶一些說明,以便向用戶解釋它是什麼。
我搜索了一個解決方案,比如把鑑別器放在一個連接表中,但什麼也沒找到。

您有什麼建議可以實現我的目標嗎?

非常感謝您的幫助。

+0

您正在尋找一種方式來顯示存儲在枝條模板內鑑別器列中的字符串嗎? – nifr

+0

是的,以及如何將另一個字段附加到此鑑別器。這就是爲什麼我在談論一個將包含鑑別器和另一個字段作爲列的連接表。 –

+0

根據判別器字段添加另一個字段應該可以使用postPersist/postUpdate監聽器輕鬆實現。 – nifr

回答

3

鑑別器列對於Doctrine 2有特殊含義,因此不能作爲關係的一部分。

但是有一個簡單的解決方法。只需添加另一列,並將其與您的鑑別器列具有相同的值。價值永遠不會改變,所以很容易做到。當然,您可以像使用其他列一樣使用新列。

我知道從數據庫的角度來看,具有相同值的兩列是不理想的。但從對象的角度來看,這並不是什麼大問題,因爲鑑別器列從不暴露爲屬性。這只是教義的作用方式。它希望這一列都是自己的。

+0

是的。我想到了這個解決方案,但是第一次拒絕它,因爲從數據庫的角度來看它並不理想。我想我現在就要和這個一起去。謝謝你的幫助。 –