【发布时间】:2011-11-09 15:11:32
【问题描述】:
我想创建一个自引用实体,但带有关于关系的描述(可能还有其他信息)。这方面的一个例子是社交网络应用程序中的朋友 - 人 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)中处理这个问题 - 或者实际上是否必须创建一个“链接”类 - 如 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
【问题讨论】:
标签: php orm doctrine-orm