据我了解,如果我想使用继承原则,需要在超类映射信息中列出所有子类。
手册指出:
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
@InheritanceType、@DiscriminatorColumn 和 @DiscriminatorMap 必须在作为映射实体层次结构的一部分的最顶层类上指定。
当我正在开发一个将被多个应用程序重用的 symfony 包时,这是一个主要问题。我想提供可以由应用程序扩展的超类。这意味着在我实现超类时子类是未知的。
问题在 Symfony2中创建具有可扩展实体的便携式 Bundle 解决了同样的问题。
这里的问题是:我必须有哪些选择来解决这个限制?
在我有这种需求的领域中,有一个订单。应用程序应该有可能实现它自己的订单项子类型。我想出了这个解决方案,但这需要很多额外的类才能获得类似继承的东西。
http://www.gliffy.com/pubdoc/4293547/L.png
我很高兴看到更好/更短的解决方案。