Doctrine2中的多对多,单向,自引用关联

时间:2012-05-31 17:48:46

标签: symfony doctrine-orm

我想'链接'一些对象。想象一下,你有这些记录的人员表:

  • Barack Obama
  • 奥巴马巴拉克
  • Barack Hussein Obama

你可以看到它是同一个人。我希望有一个存储替代人员的协会。例如,ID = 1和NAME = Barack Obama linkedPersons的人看起来像这样:

linkedPersons:
    Obama Barack
    Barack Hussein Obama
    (optionally with Barack Obama itself)

恕我直言,它应该是多对多,单向,自引用关联,但我不知道如何实现这样的关联。

1 个答案:

答案 0 :(得分:1)

我认为你可以做简单的ManyToMany单向映射。关系只关系两个用户。这将在数​​据库中创建额外的记录(A - > B和B - > A),但我认为它应该可以正常工作。

<?php
/** @Entity */
class User
{
    /**
     * @ManyToMany(targetEntity="User")
     * @JoinTable(name="alternateUsers",
     *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="alternate_user_id", referencedColumnName="id")}
     *      )
     */
    private $alternateUsers;

    public function __construct() {
        $this->alternateUsers = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function addAlternateUser(User $user) {
        $this->alternateUsers[] = $user;
        $user->alternateUsers[] = $this;
    }
}
相关问题