【问题标题】:Many-to-many self relation with extra fields?与额外字段的多对多自我关系?
【发布时间】:2012-02-03 20:10:15
【问题描述】:

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

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

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

你有什么想法吗?

谢谢!

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    恐怕你需要一个额外的类来建立这样的关联。 以下是学说文档中的提示:

    为什么多对多关联不太常见?因为你经常 想要将附加属性与关联关联,其中 如果你引入一个关联类。因此,直接 多对多关联消失,取而代之的是 3 个参与方之间的一对多/多对一关联 类。

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

    我猜应该是 Friend -> Special Association Class (with fileds: user_id,friend_id, date created) ->Friend。 并且您将 Friend 与两个提交的 $myFriends 和 $imFriendOf 中的特殊类相关联:)

    【讨论】:

    • 但我并没有真正看到这里的关联。 :/用户-> OneToMany->朋友,朋友-> ManyToOne->用户?没有 3 个类,但这里只有 2 个,因为它是用户的自关联
    • 好吧,我想我明白了,这基本上是相同的想法,但我只是映射到另一个类而不是直接用户,不是吗?
    • 没错,您必须映射到“关联”类,因为教义关联不允许您向其“关联数据库表”添加额外的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2023-02-02
    • 2017-11-22
    • 2014-09-30
    • 2022-10-25
    相关资源
    最近更新 更多