web-dev-qa-db-ja.com

Doctrine 2:追加の列を持つ結合テーブルを処理する方法

Doctrine 2?

23

まず、これが存在することを説明します:

結合テーブル(別名接合テーブルまたは相互参照テーブル)は、同じデータベース内で2つ(またはそれ以上)の他のテーブルを主キーでリンクするテーブルです。つまり、結合テーブルには外部キーのみが含まれ、これらの余分な列のための場所はありません。

したがって、そのようなテーブルに追加の列が必要な場合、それは他のテーブル間の単なる「リンク」ではなく、それ自体で実際のテーブルになります!

Doctrine 2に関しては、2つのエンティティ間の多対多の関連付けはなくなりましたが、3つのエンティティ間の1対多/多対1の関連付けが得られます。

詳細については、ここを読み続けてください。

61

2番目の記事では、マイナーアップデートを提案します。完全なイベントの代わりに、エンティティ自体内でLifecycleCallbackを使用します。

/**
 * @ORM\Entity
 * @ORM\Table(name="jobs”)
 * @ORM\HasLifecycleCallbacks
 */
class Job
{
    // ...

    /**
     * @ORM\PreRemove
     */
    public function preRemoveCallback()
    {
        $this->setPerson(null);
        $this->setCompany(null);
    }
}
1
craigh