我刚刚陷入这种棘手的情况。 我有一个名为礼物的实体。Doctrine2有条件的协会
现在礼物实体需要有一个叫做receiver
场可与2个实体RegisteredUser
实体或Guest
实体相关联。
这里的问题是,现在我怎么定义的接收器领域的关联!
我想创建一个名为GiftReceiver
使用继承映射实体的,但我不能鉴别映射到不延伸GiftReceiver类。
我是不是走错路了?有没有一种好的方法来实现这一点? 在此先感谢您的帮助! :)
我刚刚陷入这种棘手的情况。 我有一个名为礼物的实体。Doctrine2有条件的协会
现在礼物实体需要有一个叫做receiver
场可与2个实体RegisteredUser
实体或Guest
实体相关联。
这里的问题是,现在我怎么定义的接收器领域的关联!
我想创建一个名为GiftReceiver
使用继承映射实体的,但我不能鉴别映射到不延伸GiftReceiver类。
我是不是走错路了?有没有一种好的方法来实现这一点? 在此先感谢您的帮助! :)
怎么样使得User
为Guest
一个子类,您可以接收外地刚映射到User
实体。 当您第Gift
获取接收实体,学说将获取适当的对象Guest
或RegisteredUser
如何创造一些像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
也许你可以把逻辑到您的实体,返回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 ...
}
你想一个属性映射到2个实体?也许你应该将它映射到一个普通的超类! – Songo 2012-04-27 12:05:11