2012-03-28 2 views
0

ParentエンティティはSINGLE_TABLEの継承を実装する2つの子エンティティ(FooBar)を持っています。Doctrine2で識別子を動的に設定する

new Parent()エンティティを作成し、fooに動的に設定することはできますか?new Foo()を作成しますか?

+0

いいえ、それは少なくとも、ことはできません醜いハックなしで。なぜあなたはそれをしたいのですか? – Benjamin

+0

私はdiscriminatorを表す文字列を取得するシナリオがあり、その型のエンティティを作成する必要があります。私はそれのためのメソッドを作成しました、ちょうど良い方法があるかどうかを知りたがっています.. – tamir

答えて

0

いいえ、あなたが本当にあなたのコメントで述べたシナリオが必要な場合、あなたはおそらくファクトリメソッドのいくつかの種類を持つ方が良いでしょう、そこではありません。

abstract class MyParent 
{ 
    public static function fromString($type) 
    { 
     switch ($type) { 
      case 'foo': 
       return new Foo(); 
      case 'bar': 
       return new Bar(); 
     } 
     throw new DomainException('Unknown type: ' . $type); 
    } 
} 
+0

ありがとう:) btw、なぜあなたはクラス抽象を宣言しましたか? – tamir

+0

私は、サブクラスだけがインスタンス化されると仮定したからです。しかし親クラスをインスタンス化することもできれば、 'abstract'キーワードを削除することができます! – Benjamin

関連する問題