2012-02-03 14 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; 

をしかし、私は、これらの関係のためにいくつかの余分なフィールドを持っていると思います例えば作成日や状態(受け入れ、保留します、...);別のエンティティ「Friend」を作成しました。このエンティティを友人間のリンクとして使用したいと考えています。しかし、私は本当にこれを管理する方法を知りません...

アイデアはありますか?

ありがとうございます!

答えて

8

このような関連付けを行うには、余分なクラスが必要ですか? ここに教義文書のヒントがあります:

多対多の関連性はあまり一般的ではないのはなぜですか?頻繁に アソシエーションに追加のアトリビュートを関連付けたい場合、アソシエーションクラスを導入する場合は です。その結果、直接 の多対多の関連付けは消え、 クラスの間で の1対多/多対1の関連付けに置き換えられます。

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を提出して、Friendを特別クラスに関連づけています:)

+0

しかし私はここで作る団体は本当にありません。 :/ ユーザー - > OneToMany - >フレンド、フレンド - > ManyToOne - >ユーザー? 3つのクラスはありませんが、ここでは2つしかありません。ユーザーの自己関連性があるからです。 –

+0

私は自分の答えを編集しました。 –

+0

私は理解していると思う、それは基本的に同じアイデアですが、私はただのUserではなく、別のクラスにマップしますか? –