2012-04-27 33 views
2

對於doctrine2來說我相當陌生。我需要建立如下連接:如何在基於動態變量的Doctrine中進行動態關聯?

標記具有已連接的(抽象)資源。 (摘要)資源包含標籤。

我想大膽地輸入基於代碼的實體資源的對象。這樣我可以將標籤附加到實現給定接口的任何實體。

在教義中使用Zend Framework和註釋docblock樣式。

另一個例子是一個「消息」實體,它在系統中具有文本消息,它有一個作者和收件人的關聯,但我希望他們有不同的目標,具體取決於作者和收件人。例如,管理實體向用戶實體發送消息,或者用戶實體向VipUser實體發送消息。

回答

2

聽起來像類表繼承是完美的解決方案。

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#class-table-inheritance

你基本上需要創建您的父類(標籤),並提供每一個它的孩子的鑑別地圖。因此,例如..

/** 
* @Entity 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="discr", type="string") 
* @DiscriminatorMap({"tag" = "Tag", "message" = "Message", "otherentity" = "OtherEntity"}) 
*/ 
class Tag 
{ 
    // tag properties/definitions etc 
} 

/** @Entity */ 
class Message extends Tag 
{ 
    // Message specific stuff 
} 

您可以將您的「標記」實體擴展到您需要的任何其他實體。請記住爲它更新您的鑑別器映射值。

+0

這聽起來像個好主意。這個文檔很差。它是否允許我將消息連接到給定類型的抽象用戶實體(例如,用戶可以是管理實體,VIP實體和StandardUser實體)?如果是的話,那就是這樣! :-) – 2012-05-12 10:03:17

+0

它可以。但我個人會使用角色。角色ManyToOne用戶,消息ManyToOne用戶。 – 2012-05-15 08:16:36