2016-09-27 55 views
0

所以我試圖設置一個系統,其中多個表的行可以處於許多狀態之一,可以直接在表中直接查看,而無需查找表。所以我使用的教條和我有一個ManyToOne關係正常工作當我使用referencedColumnName =「id」。在一個索引但不是另一個索引上工作的主義外鍵?

/** 
* @ORM\ManyToOne(targetEntity="DataBundle\State", cascade={"persist"}) 
* @ORM\JoinColumn(name="State", referencedColumnName="id") 
*/ 
protected $State; 

然而,一旦更改referencedColumnName至名(其實我想要的值),這不工作,我得到「一般錯誤:1215無法添加外鍵約束」

/** 
* @ORM\ManyToOne(targetEntity="DataBundle\State", cascade={"persist"}) 
* @ORM\JoinColumn(name="State", referencedColumnName="name") 
*/ 
protected $State; 

我的目標是有任何表我把它放在一個列狀態,在我的狀態之一,狀態名稱可見。現在它工作,外鍵得到設置,但它只顯示ID,一旦我改變名字我得到錯誤。爲了清楚起見,我的狀態表有2列,id和名稱一個是int,另一個是varchar255.

我讀過這可能是因爲不同的數據庫引擎或不同的數據類型。所有引擎類型都是相同的,我沒有在任何地方定義$ State列的類型,它是從教義繼承的。有任何想法嗎?

+2

Look [here](http://stackoverflow.com/questions/8919910/is-it-possible-to-reference-a-column-other-than-id-for-a-joincolumn) – ciurciurek

+0

將其作爲評論,我會接受它。謝謝! – CMOS

回答

0

我認爲根據不同的Datatypes@JoinColumn是不正確的。

您可以在主實體上使用列狀態來執行該作業,只需使用'狀態'標誌(使用數據類型布爾型或整型)來限制查詢。我認爲這將是一個更好的主意。

這將是可能比我不明白你想達到什麼目標。

相關問題