如何使用单独的链接表实现OneToMany关联?

时间:2014-09-20 02:54:51

标签: doctrine-orm one-to-many

我正在现有数据库之上实现一个新应用程序。移动应用程序正在使用现有数据库,并且由于移动应用程序是由不同的团队开发的,因此我不允许更改现有表的结构。

现有数据库有一个用户表,对于我自己的应用程序的用户,我创建了自己的表和名为PortalUser的Doctrine实体(表portal_user)。

PortalUser实体将有一个名为$ children的OneToMany关联,它引用现有的User实体。换句话说,每个PortalUser都有零个或多个子用户实体。

实现这一目标最自然的方法就是拥有这样的东西(简化):

用户(现有实体):

class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var PortalUser
     *
     * @ORM\ManyToOne(targetEntity="PortalUser", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     */
    private $parent;
}

PortalUser实体:

class PortalUser
{
    /**
     * @var  int
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var array
     * @ORM\OneToMany(targetEntity="User", mappedBy="parent")
     */
    protected $children;
}

这将在现有用户表中创建一个新列“parent_id”,这是不允许的。那么是否可以使用parent_id和child_id列获得单独的链接表,相当于常规的ManyToMany链接表?如果是这样,注释会导致这样的结构?

1 个答案:

答案 0 :(得分:0)

好的,这很令人尴尬。原来它在Doctrine文档中:

  

可以通过连接映射单向一对多关联   表。从Doctrine的观点来看,它只是映射为一个   单向多对多,其中一个的唯一约束   连接列强制执行一对多基数。

Doctrine manual