(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 を使用しているまさにその点を排除し、すべてがシリアル化されたストレージ スキームです。