2012-02-03 73 views
4

我想開發一個朋友系統,我需要一個多對多的關係在我的用戶實體上;現在,這是我做了什麼:帶多餘字段的多對多自我關係?

/** 
* @ORM\ManyToMany(targetEntity="User", mappedBy="friends") 
*/ 
protected $friendsWith; 

/** 
* @ORM\ManyToMany(targetEntity="User", inversedBy="friendsWith") 
* @JoinTable(name="friends", 
*   joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, 
*   inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")} 
*   ) 
*/ 
protected $friends; 

但我想有這些關係中的一些額外字段,例如創建日期或狀態(接受,等待,......);我創建了另一個實體「朋友」,我希望將此實體用作朋友之間的鏈接。但我真的不知道如何管理這...

你有什麼想法嗎?

謝謝!

回答

8

恐怕你需要額外的班級來建立這樣的聯繫。 以下是來自教義文件的提示:

爲什麼多對多關聯不太常見?因爲您經常需要將其他屬性與關聯關聯起來,其中 情況下您將引入關聯類。因此,多對多關聯的直接消失並且被3個參與的類別之間的一對多/多對一關聯替換爲 類別。

http://www.doctrine-project.org/docs/orm/2.1/en/reference/association-mapping.html#many-to-many-unidirectional

我想這應該是朋友 - >特殊關聯類(的Fileds:USER_ID,friend_id,創建日期) - >朋友。 而你把朋友關聯到兩個提交的$ myFriends和$ imFriendOf中的特殊課程:)

+0

但是我並沒有真正看到這裏的關聯。 :/ 用戶 - > OneToMany - >朋友,朋友 - > ManyToOne - >用戶?沒有3班,但只有2這裏因爲這是一個自我關聯用戶 – 2012-02-03 21:01:34

+0

我編輯了我的答案,檢查它是否現在清楚。 – 2012-02-04 07:28:41

+0

好吧我想我明白了,它基本上是一樣的想法,但我只是映射到另一個類而不是直接用戶,不是嗎? – 2012-02-04 08:59:57