希望通过一些帮助来思考这个问题。说我在这里使用两个实体 - 用户和组。出于本示例的目的,假设每个组都有一个高级主持人和一个初级主持人,他们都是用户并且是互斥的(用户只能在一个组中,并且不能同时是高级和初级主持人)。所以在Group中,我可能有类似的东西:
class Group
{
/**
*
* @OneToOne(targetEntity="User")
*/
private $seniorModerator;
/**
*
* @OneToOne(targetEntity="User")
*/
private $juniorModerator;
}
现在在用户中,我并不关心用户是高级版主还是初级版主。我只是希望能够返回用户所在的组。我知道我必须在Group属性中添加mappedBys,但我有点难过,因为我知道我不能拥有两个mappedBys分配给同一个东西(例如$ group)。
这里最好的解决方案是在User中创建两个单独的逆属性(如$ group1和$ group2),然后创建一个getGroup()getter方法,只检查是否填充了其中一个属性并返回一个是
我没有想到的那种不那么粗俗的方法吗?感谢任何建议,提前谢谢。
答案 0 :(得分:0)
我有类似的情况,所以我创建了第三个表,其中manyToOne为User,manyToOne为Group,一个字段表示该组的此用户是否为manager。因此,您可以执行相同的添加和两个字段,指出用户是高级还是初级。
答案 1 :(得分:0)
我认为最好的解决方案是做一对一的单向"组和用户实体中的关联,因此您的组的代码将是:
class Group
{
private idGroup;
/**
*
* @OneToOne(targetEntity="User")
* @JoinColumn(name="seniorModerator_id", referencedColumnName="idUser")
*/
private $seniorModerator;
/**
*
* @OneToOne(targetEntity="User")
* @JoinColumn(name="juniorModerator_id", referencedColumnName="idUser")
*/
private $juniorModerator;
}
对于您的用户:
class User{
private idUser;
/**
*
* @oneToOne(targetEntity="Group")
* @JoinColumn(name="group_id", referencedColumnName="idGroup")
*/
private $group;
}
如果您想了解关于关联映射的更多信息hir是文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-one-unidirectional