2014-01-30 192 views
2

在這裏使用Doctrine 2和Symfony。我對Doctrine相當陌生,無法在他們的文檔中找到我要找的內容,所以我正在尋找一些有關情況的指導。學說和多個實體關聯

我有這些實體: 1.簡介(一個人的輪廓,一個人可以有多個地址) 2.學校(學校信息,學校可以有多個地址) 3.地址(所有地址,關聯到上述實體之一)

以前,我有配置文件,ProfileAddress,學校,SchoolAddress,它運行良好,但我寧願有一個類/表地址更新,因爲我可能會得到其他實體還需要地址的道路。另外,如果我的地址格式發生變化,我只想更改一個類/表而不是很多。

我的問題是這樣的...是否有可能將兩個(或更多)不同的實體關聯到單個實體?以下是我希望在實際表格中看到的數據示例。

-Profiles-

|id|fname |lname| 
| 1|John |Smith| 
| 2|Jane |Jones| 

-Schools-

|id|name    |type    | 
| 1|City College  |University  | 
| 2|Greendale  |Community College| 

-Addresses-

|id|src_id|src  |type |address1   |address2| 
| 1|  1|profiles|maling |PO BOX 555  |  | 
| 2|  1|profiles|physical|123 W. Main St. |Apt A | 
| 3|  1|schools |physical|541 University Way|  | 
| 4|  2|schools |physical|111 Winger Ave |  | 

這是可能的教義?如果是這樣的話?還是有更好的方法可以設計出來? 在這種情況下別人做了什麼?

+0

有具有參考表的好處:學說會認爲它如果它匹配了實體的配置是否正確。實體被正確保存。所以不需要創建參考表的實體。易如反掌。 – geoB

回答

3

這很有可能,你只需要2個映射表,所以你不需要在地址中有一個源列,你可以有一個profile_address和school_address表。您需要指定從簡介到地址以及學校解決的單向(單向)。

編輯:

在給予用戶角色的標準例如

你會:

/** 
* @ORM\ManyToMany(targetEntity="Role") 
* @ORM\JoinTable(name="user_role", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} 
*) 
*/ 
protected $roles; 

現在可以說你想有另一個對象,讓我們說,你想對角色的旁觀者你也可以:

/** 
* @ORM\ManyToMany(targetEntity="Role") 
* @ORM\JoinTable(name="bystander_role", 
*  joinColumns={@ORM\JoinColumn(name="bystander_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} 
*) 
*/ 
protected $roles; 

這就是它的全部。

+0

這是很好的知道它的可能性。我的問題是如何?我沒有在文檔中找到任何內容,但也許我正在尋找錯誤的地方。您知道的任何示例或文檔? – Bob

+0

剛剛爲你舉了一個例子。 –