Orm Doctrine2中的条件关联
我刚刚遇到了这种棘手的情况。 我有一个实体叫做礼物 现在,礼品实体需要有一个名为Orm Doctrine2中的条件关联,orm,doctrine-orm,associations,Orm,Doctrine Orm,Associations,我刚刚遇到了这种棘手的情况。 我有一个实体叫做礼物 现在,礼品实体需要有一个名为receiver的字段,该字段可以与两个实体RegisteredUser实体或Guest实体关联 现在的问题是如何定义receiver字段的关联 我想创建一个名为GiftReceiver的实体,使用继承映射,但我无法将鉴别器映射到一个不扩展GiftReceiver的类 我走错方向了吗?有没有一个好的方法来实现这一点? 提前感谢您的帮助!!:) 创建一个类似于giftentermediary实体的东西怎么样。具有以下字
receiver
的字段,该字段可以与两个实体RegisteredUser
实体或Guest
实体关联
现在的问题是如何定义receiver字段的关联
我想创建一个名为GiftReceiver
的实体,使用继承映射,但我无法将鉴别器映射到一个不扩展GiftReceiver的类
我走错方向了吗?有没有一个好的方法来实现这一点?
提前感谢您的帮助!!:) 创建一个类似于
giftentermediary
实体的东西怎么样。具有以下字段:
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
以下是从上述关联中收集数据的示例查询:
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
创建一个类似于
的实体怎么样。具有以下字段:
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
以下是从上述关联中收集数据的示例查询:
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 ...
}
也许您可以将逻辑放入实体中,该实体返回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 ...
}
将User
的子类设为Guest
怎么样,您可以将receiver字段映射到User
实体。
当您在礼物
上获取接收者实体时,条令将获取相应的对象来宾
或注册者
如何将用户
的子类设为来宾
,您只需将接收者字段映射到用户
实体。
当您在礼物
上获取接收者实体时,条令将获取相应的对象来宾
或RegisteredUser
是否要将单个属性映射到两个实体?也许你应该把它映射到一个普通的超类!是否要将单个属性映射到2个实体?也许你应该把它映射到一个普通的超类!