2012-06-22 68 views
1

我使用Symfony2和Doctrine2來構建應用程序。應用程序的一部分處理地址。我有一個表「地址」和三個與多對多關係(僱員,客戶,供應商)關聯的表。我用一個連接表「contact_address」來設置它。Doctrine2與多個表的多對多關係

如何創建具有多對多關係的實體?在我的員工,客戶和供應商實體中,我有

/** 
* @var Addressess 
* 
* @ORM\ManyToMany(targetEntity="Address", mappedBy="contacts") 
*/ 
private $addresses; 

我在地址實體中放什麼?

/** 
    * @var Contacts 
    * 
    * @ORM\ManyToMany(targetEntity="Employee", inversedBy="id") 
    * @ORM\JoinTable(name="contact_address", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="addressID", referencedColumnName="addressID") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="employeeID", referencedColumnName="employeeID") 
    * } 
    *) 
    */ 
    private $contacts; 

是我的第一個想法,但是客戶和供應商是什麼?

回答

2

一個地址可以同時鏈接到幾個人嗎?這似乎有點奇怪,我...

在任何情況下,我建議你有一個實體聯繫人,與地址的一對多關係,並且或者一對一之間聯繫人和員工,聯繫人和客戶,以及聯繫人和供應商,或讓員工,客戶和供應商繼承聯繫人。

+1

那麼我在考慮的情況下,例如幾個客戶端爲同一家公司工作,並具有相同的地址。因此,您將擁有一個帶有所有常見字段的客戶表,然後爲員工,客戶和供應商提供一個額外的表格,只需爲每個實體指定字段? – cw24

+0

那麼這就是我爲自己的項目選擇的解決方案。這是處理地址問題的一個相當方便的方法。雖然,即使在你的情況下,我建議只將一個地址鏈接到一個聯繫人(或任何你稱之爲的地址)。可能有重複,但只是考慮員工更改地址的情況,而不考慮他正在爲之工作的公司......您必須更改每個人的地址,或爲他創建一個新地址......這很簡單(而且,我認爲,更好)只有一個實體與多個地址鏈接。 –

+0

好的,我將模式更改爲一對多單向關係,地址只能屬於一個聯繫人,而聯繫人可以擁有多個地址。這[blogpost](http://www.benedikt-wolters.de/blog/web-development/20/doctrine2-one-to-many-unidirectional-with-join-table-association-mapping)幫助我設置了在學說中。對教條文件的一個很好的補充。謝謝。 – cw24