Doctrine ORM:如何用n-n连接表定义1-n关系

时间:2011-07-18 19:24:02

标签: doctrine

所以,这有点复杂:我有两个表,比如catsdogs。 它们处于多对多关系中(可以称为friendships或其他),因此Doctrine会自动为我创建一个包含适当字段的表cats_dogs。 (默认为rowid, cat_id, dog_id。)

现在,想象一下,我有第三张桌子,award,我想要奖励其中一个友谊。因此,我需要一个引用cats_dogs中一行的字段。但是,由于这个表在我的模型之间并不存在,(Doctrine为我处理它)对于这个最优雅的解决方案是什么?

最后,我希望在我的award模型中有两个字段,catdog,他们需要有友谊。

我正在使用注释驱动程序。

2 个答案:

答案 0 :(得分:0)

是什么阻止你手动创建m:n表而不是让doctrine为你做?

答案 1 :(得分:0)

Doctrine的目标是映射来自E / R模式的对象,并使访问对象连接变得更加容易。因此,我认为Doctrine自动提供的表cats_dogs是必要的。它简洁明了,达到了它的目的,即它提供了所有猫的狗的列表,反之亦然,它是狗的所有猫。

因此,我可以得出结论,最好创建一个名为Cat的第三个实体(DogAward除外),它与{{1}提供一对一的关系和Cat的另一个一对一关系。使其与Dog表保持一致只取决于您,默认情况下不是Doctrine任务。例如,您可以使用一些级联持久选项。 我相信这是Doctrine最有效的解决方案。

作为最后一点,请考虑每个表应映射一个或多个实体之间的特定关系,实际上表cats_dogs代表友谊关系,而表{{} 1}}将代表两个朋友之间获得的关系关系。