我剛剛陷入這種棘手的情況。 我有一個名爲禮物的實體。Doctrine2有條件的協會
現在禮物實體需要有一個叫做receiver
場可與2個實體RegisteredUser
實體或Guest
實體相關聯。
這裏的問題是,現在我怎麼定義的接收器領域的關聯!
我想創建一個名爲GiftReceiver
使用繼承映射實體的,但我不能鑑別映射到不延伸GiftReceiver類。
我是不是走錯路了?有沒有一種好的方法來實現這一點? 在此先感謝您的幫助! :)
我剛剛陷入這種棘手的情況。 我有一個名爲禮物的實體。Doctrine2有條件的協會
現在禮物實體需要有一個叫做receiver
場可與2個實體RegisteredUser
實體或Guest
實體相關聯。
這裏的問題是,現在我怎麼定義的接收器領域的關聯!
我想創建一個名爲GiftReceiver
使用繼承映射實體的,但我不能鑑別映射到不延伸GiftReceiver類。
我是不是走錯路了?有沒有一種好的方法來實現這一點? 在此先感謝您的幫助! :)
怎麼樣使得User
爲Guest
一個子類,您可以接收外地剛映射到User
實體。 當您第Gift
獲取接收實體,學說將獲取適當的對象Guest
或RegisteredUser
如何創造一些像GiftIntermediary
實體。具有以下字段:
Receiver
RegisteredUser
Guest
然後採用下列協會:
Gift.Receiver = GiftIntermediary.Receiver
RegisteredUser.ID = GiftIntermediary.RegisteredUser
Guest.ID = GiftIntermediary.Guest
下面是一個簡單的查詢從上述協會收集的數據:
SELECT Gift.*, RegisteredUser.*, Guest.*
FROM Guest INNER JOIN (RegisteredUser INNER JOIN (Gift INNER JOIN GiftIntermediary ON Gift.Receiver = GiftIntermediary.Receiver) ON RegisteredUser.ID = GiftIntermediary.RegisteredUser) ON Guest.ID = GiftIntermediary.Guest
也許你可以把邏輯到您的實體,返回Guest
或RegisteredUser
,兩者都實現相同的接口,稱爲GiftReceiver
。
class Gift {
// mapped to guest; nullabe true
protected $guest;
// mapped to registeredUser; nullabe true
protected $registeredUser;
public function getReceiver()
{
return $this->getGuest() ?: $this->getRegisteredUser();
}
// getters/setters ...
}
你想一個屬性映射到2個實體?也許你應該將它映射到一個普通的超類! – Songo 2012-04-27 12:05:11