2014-05-04 152 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