さまざまなタイプのオブジェクトのキーと値のペアを格納できる単純なポリモーフィック属性テーブルを作成しようとしています。単一テーブル継承を使用すると、これが私の現在の構成です。
/**
* @Entity @Table(name="attributes")
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="subject", type="string")
* @DiscriminatorMap({"page" = "PageAttribute", "product" = "ProductAttribute"})
*/
class PageAttribute
{
/**
* @ManyToOne(targetEntity="Page", inversedBy="attributes")
* @JoinColumn(name="subject_id", referencedColumnName="id")
*/
private $page;
}
/**
* @Entity @Table(name="attributes")
*/
class ProductAttribute extends PageAttribute
{
/**
* @ManyToOne(targetEntity="Product", inversedBy="attributes")
* @JoinColumn(name="subject_id", referencedColumnName="id")
*/
private $product;
}
問題は、このスキーマがロードされるときに、subject_id列がページテーブルにリンクする外部キー制約を使用して作成されることです。
subject_idをすべての外部キーに使用できるように、この制約を防ぐ方法はありますか?それ以外の場合は、オブジェクトのタイプごとに列を作成する必要がありますが、これは避けようとしています。