2015-06-15 11 views
11

Kann Vererbung für Wertobjekte verwendet werden, die in Doktrintitäten eingebettet sind?Vererbung von Embeddables der Doktrin

Die Situation über die ich denke, ist:

Ich habe eine Entität, und Embedded-Value-Objekt hat. Das Wertobjekt hat die folgende Hierarchie:

class myEntity { 
    /** @Embedded(class = "baseValueObject") */ 
    private $value_object; 
    ... 
} 

class baseValueObject {...} 
class valueObject1 extends baseValueObject{...} 
class valueObject2 extends baseValueObject2{...} 

Wenn ich meine Einheit definieren baseValueObject als integrierbare zu haben, passiert nichts, wenn ich das Schema-Tool verwenden, um mein Db-Schema zu aktualisieren, so dass ich denke, das ist nicht der Weg zu TU es.

Eine weitere Option, über die ich nachdenke, ist die Verwendung der Vererbung einzelner Tabellen für die Entität, um eine untergeordnete Entität zu erstellen, die eines der Wertobjekte und eine andere untergeordnete Entität für die andere verwendet. Gefällt mir:

class myEntity { 
    /** @Embedded(class = "baseValueObject") */ 
    private $value_object; 
    ... 
} 

class myEntityA extends myEntity { 
    /** @Embedded(class = "valueObject1") */ 
    private $value_object; 
    ... 
} 

class myEntityB extends myEntity { 
    /** @Embedded(class = "valueObject2") */ 
    private $value_object; 
    ... 
} 

class baseValueObject {...} 
class valueObject1 extends baseValueObject{...} 
class valueObject2 extends baseValueObject2{...} 

Was ist der richtige Ansatz? Ist es überhaupt möglich, es so zu machen?

Antwort

0

Wenn Sie Ihr Wert Objekt in Feld verwenden, dann sollten Sie in der Lehre neue Art definieren http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html

Wenn Sie Eigenschaften von Base erben wollen, dann sollten Sie @MappedSuperclass Anmerkung verwenden http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

sollten Sie verwenden @Embeddable wenn Sie möchten die Entität durch bestimmte Eigenschaften teilen, indem Sie bestimmte Entitäten erstellen. Daher können Sie Value Object nicht als Ziel verwenden. Laut Dokumentation (Ich kann den dritten Link nicht teilen).