2014-05-04 125 views
0

我有一个数据库表是这样的: enter image description hereSymfony2中,Doctine2:多自参照一对多的关系

现在,我要让自参考一到许多国家,城市和乡村之间。

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

注意城市有两个关系:

  • 许多城市 - >一个状态

  • 一个城市 - >许多村庄

我应该怎么办使用Doctrine yml配置,实体注释和表单?

+2

你的工作模式是错误的,可考虑做3个实体:国家,城市和村庄。然后,您将可以轻松地将它们与ManyToOne关系链接起来。 – Pierrickouw

+0

+1 @GreenLeaf你是对的,如果我可以添加建议:创建一个树模型,我猜它会被轻松理解,容易与现实生活状态 - >城市 - >村庄https://github.com/Atlantic18/ DoctrineExtensions – tawfekov

回答

3

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

首先,你可能想阅读有关数据库标准化: http://en.wikipedia.org/wiki/Database_normalization

其次,如果你真的坚持保留您的数据完好无损,你可以试着让多对多reations这样的学说将创建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")} 
*  ) 
*/ 

这可能会为你

+0

我编辑了我的模型并创建了3个具有一对多关系的实体,但问题仍然是原来的! – MiladSafaei