1

我刚刚遇到了这个棘手的情况。我有一个名为 Gift 的实体。

现在礼物实体需要有一个名为的字段,该字段receiver可以与 2 个实体RegisteredUser实体或Guest实体相关联。

现在的问题是我如何定义接收者字段的关联!!

我想创建一个名为GiftReceiver使用继承映射的实体,但我无法将鉴别器映射到不扩展 GiftReceiver 的类。

我走错路了吗?有没有好的方法来实现这个?在此先感谢您的帮助!!:)

4

3 回答 3

4

User创建一个as的子类怎么样Guest,你可以将接收者字段映射到User实体。当您在 上获取接收者实体时Gift,学说将获取适当的对象GuestRegisteredUser

于 2012-04-30T09:29:34.760 回答
1

也许您可以将逻辑放入您的实体中,该实体返回 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 ...
}
于 2012-04-28T15:25:53.107 回答
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
于 2012-04-27T19:04:54.713 回答