Inheritance 在Doctrine2中动态设置鉴别器

Inheritance 在Doctrine2中动态设置鉴别器,inheritance,doctrine-orm,discriminator,Inheritance,Doctrine Orm,Discriminator,我有一个Parent实体,它有两个子实体(Foo和Bar)实现单表继承 是否可以创建一个new Parent()实体并动态地将其鉴别器设置为foo,而不是创建一个new foo()?不,没有,如果您真的需要注释中提到的场景,那么使用某种工厂方法可能会更好: 抽象类MyParent { 公共静态函数fromString($type) { 交换机($类型){ 案例“foo”: 返回新的Foo(); “酒吧”一案: 返回新条(); } 抛出新的DomainException('未知类型:'。$type

我有一个
Parent
实体,它有两个子实体(
Foo
Bar
)实现
单表继承


是否可以创建一个
new Parent()
实体并动态地将其鉴别器设置为
foo
,而不是创建一个
new foo()

不,没有,如果您真的需要注释中提到的场景,那么使用某种工厂方法可能会更好:

抽象类MyParent
{
公共静态函数fromString($type)
{
交换机($类型){
案例“foo”:
返回新的Foo();
“酒吧”一案:
返回新条();
}
抛出新的DomainException('未知类型:'。$type);
}
}

不,这是不可能的,至少没有丑陋的黑客。为什么要这样做?我有一个场景,其中我得到一个表示鉴别器的字符串,我需要创建一个该类型的实体。我已经为此创建了一个方法,只是想知道是否有更好的方法..谢谢:)顺便问一下,为什么要声明类抽象?因为我假设只有子类会被实例化。但是如果父类也可以实例化,那么您可以删除
abstract
关键字!