我想創建一個自引用實體,但有關於關係的描述(可能還有其他信息)。一個例子就是社交網絡應用中的朋友 - 人A(實體)可以與人B(實體)鏈接,但是他們的關係可以被描述爲「朋友」,「兄弟」,「叔叔」等。doctrine2多對多自我引用與中間細節
學說文檔類可自行參考使用以下鏈接表:
<?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)中處理這個問題 - 或者實際上是否需要創建一個「鏈接」類 - 比如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;
}
但我不知道接下來會發生什麼......?
研究stackoverflow我發現了類似的問題,但更多關於直接鏈接。
Doctrine2: Best way to handle many-to-many with extra columns in reference table
Need help understanding Doctrine many to many self referencing code
我正在尋找使用「狀態」代碼非常相似,其中有許多與自己來確定允許之前或之後允許什麼狀態。這個解決方案是否會缺少一種查找相反關係的方法?即如果您有一個用戶與另一個用戶建立了關係,那麼可以稱他爲「relatedUser」。現在,如果您開始與用戶打電話「relatedUser」並運行$ user-> getRelations(),您會找到原始用戶嗎?我是symfony的新成員,所以我試圖弄清楚你的解決方案是否適合我... – snoop168
應該同時工作。用一些代碼示例建議發佈一個問題。 – mogoman