与额外领域的多对多自我关系?

时间:2012-02-03 20:10:16

标签: symfony doctrine-orm

我正在尝试开发一个朋友系统,我需要在我的用户实体上建立多对多关系;现在,这就是我所做的:

/**
 * @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;

但是我想为这些关系添加一些额外的字段,例如创建日期或状态(已接受,待定,......);我创建了另一个实体“朋友”,我希望这个实体可以用作朋友之间的链接。但我真的不知道如何管理这个......

你有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:9)

我担心你需要额外的课来建立这样的联系。 以下是学说文档的提示:

  

为什么多对多关联不太常见?因为经常你   想要将其他属性与关联相关联,其中   你介绍一个关联类的情况。因此,直接   多对多关联消失并被替换为   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中的特殊课程联系起来:)