我刚刚遇到了这个棘手的情况。我有一个名为 Gift 的实体。
现在礼物实体需要有一个名为的字段,该字段receiver
可以与 2 个实体RegisteredUser
实体或Guest
实体相关联。
现在的问题是我如何定义接收者字段的关联!!
我想创建一个名为GiftReceiver
使用继承映射的实体,但我无法将鉴别器映射到不扩展 GiftReceiver 的类。
我走错路了吗?有没有好的方法来实现这个?在此先感谢您的帮助!!:)
我刚刚遇到了这个棘手的情况。我有一个名为 Gift 的实体。
现在礼物实体需要有一个名为的字段,该字段receiver
可以与 2 个实体RegisteredUser
实体或Guest
实体相关联。
现在的问题是我如何定义接收者字段的关联!!
我想创建一个名为GiftReceiver
使用继承映射的实体,但我无法将鉴别器映射到不扩展 GiftReceiver 的类。
我走错路了吗?有没有好的方法来实现这个?在此先感谢您的帮助!!:)
User
创建一个as的子类怎么样Guest
,你可以将接收者字段映射到User
实体。当您在 上获取接收者实体时Gift
,学说将获取适当的对象Guest
或RegisteredUser
也许您可以将逻辑放入您的实体中,该实体返回 aGuest
或 a 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 ...
}
如何创建一个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