我刚刚陷入这种棘手的境地。 我有一个名为Gift的实体。
现在,礼物实体需要有一个名为receiver
的字段,该字段可以与2个实体RegisteredUser
实体或Guest
实体相关联。
现在问题是如何定义接收器字段的关联!!
我想创建一个名为GiftReceiver
的实体使用继承映射,但我无法将鉴别器映射到不扩展GiftReceiver的类。
我走错了路吗?有没有一个好方法来实现这个? 在此先感谢您的帮助!! :)
答案 0 :(得分:4)
如何将User
的子类设为Guest
,您只需将接收器字段映射到User
实体即可。
当您在Gift
上获取接收器实体时,doctrine将获取相应的对象Guest
或RegisteredUser
答案 1 :(得分:1)
也许你可以将逻辑放入你的实体,它返回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 :(得分:0)
如何创建类似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