Symfony2,Doctrine2:多重自我引用一对多关系

时间:2014-05-04 21:52:42

标签: symfony doctrine-orm doctrine symfony-2.1 symfony-2.3

我有一个这样的数据库表: enter image description here

现在,我想在州,城市和村庄之间进行一对多的自我引用。

每个州都有很多城市,每个城市都有很多村庄。

请注意,城市有两种关系:

  • 许多城市 - >一个州

  • 一个城市 - >许多村庄

我应该如何使用Doctrine yml配置,实体注释和表单?

1 个答案:

答案 0 :(得分:3)

我同意@GreenLeaf,你的模型是错误的。无法区分模型的两个记录如何保持常识。

首先,您可能想了解数据库规范化: http://en.wikipedia.org/wiki/Database_normalization

其次,如果你真的坚持保持你的数据完整,你可以尝试制作ManyToMany reations,这样doctrine会创建3个额外的表,你可以通过定义正确的字段名来区分关系类型。在这里阅读:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html让你可以试试你的桌子“区”:

/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Cities",
 *      joinColumns={@JoinColumn(name="state_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="city_id", referencedColumnName="id")}
 *      )
 */


/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Villages",
 *      joinColumns={@JoinColumn(name="city_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="village_id", referencedColumnName="id")}
 *      )
 */

这可能适合你