我正在尝试创建一个简单的多态属性表,该表可以存储不同类型对象的键值对。使用单表继承,这是我当前的配置:
/**
* @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;
}
问题是,当加载此模式时,会使用链接到 pages 表的外键约束创建 subject_id 列。
有没有办法防止这种约束,以便 subject_id 可用于所有外键?否则,我必须为每种类型的对象设置一个列,这是我试图避免的。