Я хотел бы создать самоссылающуюся сущность, но с описанием (и, возможно, другой информацией) об отношениях. Примером этого могут быть друзья в приложении для социальной сети - Лицо A (сущность) может связываться с Лицом B (сущностью), однако их отношения могут быть описаны как «друг», «брат», «дядя» и т. Д.
Из документации Doctrine можно сослаться на класс с помощью таблицы ссылок, используя следующее:
<?php
/** @Entity */
class User
{
// ...
/**
* @ManyToMany(targetEntity="User", mappedBy="myFriends")
*/
private $friendsWithMe;
/**
* @ManyToMany(targetEntity="User", inversedBy="friendsWithMe")
* @JoinTable(name="friends",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")}
* )
*/
private $myFriends;
public function __construct() {
$this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
$this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
однако не похоже, что вы можете добавить свойства, используя этот метод.
Вопрос в том, есть ли способ справиться с этим в одном классе (например, User.php) - или нужно было бы на самом деле создать класс "link", такой как UserLink.php? Я как бы застрял, создавая класс ссылок, когда начал отношения:
class UserLink
{
// ...
/**
* @ORM\Column(type="text", nullable=true)
*/
protected $relationship; // being brother, uncle etc
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="links")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* @var type
*/
private $user;
}
Но я не уверен, что будет дальше ...?
Изучая стекопоток, я нашел похожие вопросы, но больше о прямых ссылках.
Doctrine2: лучший способ справиться со многими ко многим с помощью дополнительных столбцов в справочной таблице
Нужна помощь в понимании Учения многие ко многим самоссылающимся кодам