在关系的反面上结合教义中的多个一对一关系



希望得到一些帮助来解决这个问题。假设我在这里使用两个实体 - 用户和组。对于此示例,假设每个组都有一个高级版主和一个初级版主,这两个人都是用户并且相互排斥(一个用户只能在一个组中,不能同时是高级版主和初级版主)。所以在小组中,我可能会有这样的东西:

class Group
{
/**
* 
* @OneToOne(targetEntity="User")
*/
private $seniorModerator;
/**
* 
* @OneToOne(targetEntity="User")
*/
private $juniorModerator;
}

现在在用户中,我不在乎用户是高级版主还是初级版主。我只是希望能够返回用户所在的组。我知道我必须在组属性中添加 mappedBys,但我有点困惑,因为我知道我不能将两个 mappedBys 分配给同一件事(例如$group)。

这里最好的解决方案是在 User 中创建两个单独的反向属性(如 $group 1 和 $group 2),然后创建一个 getGroup() getter 方法,该方法只检查这些属性中的任何一个是否已填充并返回一个?

有没有我没有想到的不那么黑客的方法?感谢任何建议,提前感谢。

我也有类似的情况,所以我创建了第三个表,其中包含许多ToOne到用户,许多ToOne到组和一个字段,该字段显示该组的该用户是否是经理。因此,您可以执行相同的添加和两个字段,以说明用户是高级还是初级。

我认为最好的解决方案是在组和用户实体中进行"一对一单向"关联,因此您的组的代码将是:

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;
}

如果您想了解有关关联映射的更多信息,请参阅文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-one-unidirectional

相关内容

  • 没有找到相关文章

最新更新