1

いくつかのオブジェクトを「リンク」したいと思います。次のレコードを含むPersonテーブルがあるとします。

  • バラック・オバマ
  • オバマバラク
  • バラク・フセイン・オバマ

ご覧のとおり、同じ人物です。代替者を保管する協会が欲しいのですが。たとえば、ID=1およびNAME=Barack ObamaのPersonの場合、次の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 に答える