7

次の抽象クラスを作成しました。これは、単一テーブルの継承を使用し、 DiscriminatorColumn でサブクラスをマップしますmodel

/**
 * @Entity
 * @Table(name="entity")
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="model", type="string")
 * @DiscriminatorMap({
 *      "green" = "model\GreenEntity",
 *      "blue"  = "model\BlueEntity"
 * })
 */
abstract class AbstractEntity
{
    /** @Id @Column(type="string") */
    protected $entity_id;
}

いくつかのクラスで抽象クラスを拡張するとしましょうAbstractEntity:

class GreenEntity extends AbstractEntity {}
class BlueEntity extends AbstractEntity {}

そして、これらをいくつかのサブクラスで拡張します

class GreenEntityChildOne extends GreenEntity {}
class GreenEntityChildTwo extends GreenEntity {}
class BlueEntityChildOne extends BlueEntity {}
class BlueEntityChildTwo extends BlueEntity {}

たとえば、インスタンス化GreenEntityChildOneしてデータベースに永続化すると、マッピングがないという例外がスローされます。

私がやろうとしているのはGreenEntityChildOneGreenEntity(または、下位のクラスを拡張するすべてのクラスAbstractEntityが、上位の抽象クラスを拡張するクラスとしてマップされるように)マップされることです。

これはまったく可能ですか?

4

2 に答える 2

0

答えはおそらく Doctrine Docs にあります:

「マップされたエンティティ階層の一部であるすべてのエンティティ クラス (最上位クラスを含む) は、@DiscriminatorMap で指定する必要があります」

http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

GreenEntity と BlueEntity のみを指定しました。

何を言っているのかわからない。これは私が Doctrine について読んだ最初のものです...

于 2015-09-16T12:21:59.813 に答える