我刚刚遇到了这个棘手的情况。我有一个名为 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