Отношение «многие ко многим» с дополнительными полями? - PullRequest
4 голосов
/ 04 февраля 2012

Я пытаюсь разработать систему друзей, и мне нужно отношение «многие ко многим» для моих пользовательских сущностей;на данный момент это то, что я сделал:

/**
 * @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 Ответ

9 голосов
/ 04 февраля 2012

Боюсь, вам нужен дополнительный класс для такой ассоциации. Вот подсказка из документации доктрины:

Почему ассоциации «многие ко многим» встречаются реже? Потому что часто ты хотите связать дополнительные атрибуты с ассоциацией, в которой В случае, если вы вводите ассоциативный класс. Следовательно, прямой ассоциация «многие ко многим» исчезает и заменяется связи один-ко-многим / многие-к-одному между тремя участвующими классы.

http://www.doctrine -project.org / документы / ОРМ / 2,1 / ы / ссылки / ассоциация-mapping.html # многие-ко-многим-однонаправленный

Полагаю, это должен быть Friend -> Special Class Class (с полями: user_id, friend_id, дата создания) -> Friend. И вы связываете друга со специальным классом в двух поданных $ myFriends и $ imFriendOf:)

...