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个实体?也许你应该把它映射到一个普通的超类!