2015-06-15 16 views
11

È possibile utilizzare l'ereditarietà sugli oggetti valore incorporati in entità di dottrina?Ereditarietà delle risorse incorporate di doctrina

La situazione sto pensando è:

Ho un ente che ha e oggetto embedded value. Quell'oggetto valore ha la seguente gerarchia:

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

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

Se io definisco la mia entità di avere baseValueObject come embeddable, non succede nulla quando uso lo schema-strumento per aggiornare il mio schema db, quindi credo che non è il modo per fallo.

Un'altra opzione a cui sto pensando è di utilizzare l'ereditarietà a tabella singola sull'entità per creare un'entità figlio che utilizza uno degli oggetti valore e un'altra entità figlio per l'altro. In questo modo:

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{...} 

Qual è l'approccio corretto? È persino possibile farlo in questo modo?

risposta

0

Se si desidera utilizzare l'oggetto valore nel campo allora si dovrebbe definire nuovo tipo di dottrina http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html

Se si desidera ereditare le proprietà dalla base, allora si dovrebbe utilizzare @MappedSuperclass annotazione http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

Si dovrebbe usare @Embeddable quando vuoi dividere l'entità per proprietà specifiche creando entità specifiche. Quindi non puoi usare Oggetto Valore come bersaglio. Secondo la documentazione (non sono in grado di condividere il terzo link).