所以,这有点复杂:我有两个表,比如cats
和dogs
。
它们处于多对多关系中(可以称为friendships
或其他),因此Doctrine会自动为我创建一个包含适当字段的表cats_dogs
。 (默认为rowid, cat_id, dog_id
。)
现在,想象一下,我有第三张桌子,award
,我想要奖励其中一个友谊。因此,我需要一个引用cats_dogs
中一行的字段。但是,由于这个表在我的模型之间并不存在,(Doctrine为我处理它)对于这个最优雅的解决方案是什么?
最后,我希望在我的award
模型中有两个字段,cat
和dog
,他们需要有友谊。
我正在使用注释驱动程序。
答案 0 :(得分:0)
是什么阻止你手动创建m:n表而不是让doctrine为你做?
答案 1 :(得分:0)
Doctrine的目标是映射来自E / R模式的对象,并使访问对象连接变得更加容易。因此,我认为Doctrine自动提供的表cats_dogs
是必要的。它简洁明了,达到了它的目的,即它提供了所有猫的狗的列表,反之亦然,它是狗的所有猫。
因此,我可以得出结论,最好创建一个名为Cat
的第三个实体(Dog
和Award
除外),它与{{1}提供一对一的关系和Cat
的另一个一对一关系。使其与Dog
表保持一致只取决于您,默认情况下不是Doctrine任务。例如,您可以使用一些级联持久选项。
我相信这是Doctrine最有效的解决方案。
作为最后一点,请考虑每个表应映射一个或多个实体之间的特定关系,实际上表cats_dogs
代表友谊关系,而表{{} 1}}将代表两个朋友之间获得的关系关系。