1

(Doctrine 2を使用して)エンティティを互いに埋め込む方法はありますか(特定のエンティティのテーブルを用意する必要さえありません)?次のようなクラスを持つ最も簡単な例:

class Point {

    /** @Id @Column(type="integer") */
    private $x;

    /** @Id @Column(type="integer") */
    private $y;
}

次に、これを次のような他のオブジェクトに埋め込みます。

class Line {

    /**
     * @OneToOne(targetEntity="Point")
     * @JoinColumn(name="start_x", referencedColumnName="x")
     * @JoinColumn(name="start_y", referencedColumnName="y")
     **/
    private $start;

    /**
     * @Column(type="integer")
     **/
    private $length;
}

ポイント:すべてのフィールドがPoint主キーを構成し、実際には埋め込まれてLineいるため、テーブルを使用する意味はありません。

型として使用し、PHP にポイントを varchar フィールドにシリアル化させる 1 つの可能性については知っていますが、それは、キー値arrayの代わりに ORM を使用しているまさにその点を排除し、すべてがシリアル化されたストレージ スキームです。

4

0 に答える 0