php - inversejoincolumns - Herencia en los embeddables de la doctrina.
inversejoincolumns doctrine (2)
Si desea extender uno incrustado de otro, debe configurar las propiedades de los padres como protected
no como private
.
¿Es posible usar la herencia en objetos de valor incrustados en entidades doctrinales?
La situación en la que estoy pensando es:
Tengo una entidad que tiene un objeto de valor incorporado. Ese objeto de valor tiene la siguiente jerarquía:
class myEntity {
/** @Embedded(class = "baseValueObject") */
private $value_object;
...
}
class baseValueObject {...}
class valueObject1 extends baseValueObject{...}
class valueObject2 extends baseValueObject2{...}
Si defino que mi entidad tenga baseValueObject como un elemento que se puede incrustar, no uso nada cuando uso la herramienta de esquema para actualizar mi esquema de db, por lo que creo que esa no es la forma de hacerlo.
Otra opción en la que estoy pensando es usar la herencia de una sola tabla en la entidad para crear una entidad secundaria que use uno de los objetos de valor y otra entidad secundaria para la otra. Me gusta esto:
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{...}
¿Cuál es el enfoque adecuado? ¿Es incluso posible hacerlo de esta manera?
Si desea usar su Objeto de valor en el campo, entonces debe definir un nuevo tipo en la doctrina http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html
Si desea heredar propiedades de la base, debe usar la anotación @MappedSuperclass
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
Debería usar @Embeddable
cuando quiera dividir una entidad por propiedades específicas creando entidades específicas. Por lo tanto, no puedes usar el objeto de valor como objetivo. Según la documentación (no puedo compartir el tercer enlace).