1

我想“链接”一些对象。假设您有包含这些记录的 Person 表:

  • 巴拉克奥巴马
  • 奥巴马巴拉克
  • 巴拉克侯赛因奥巴马

如您所见,它是同一个人。我想有一个存储替代人的协会。例如,对于具有ID=1 和NAME=Barack Obama的人,linkedPersons将如下所示:

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

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

4

1 回答 1

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;
    }
}
于 2012-05-31T20:38:34.610 回答