2012-01-20 12 views
10

Me gustaría extender clases Entity \ Base, ¿cómo hacer esto en Doctrine 2.1? Mi investigación demostró que cada vez que alguien encuentra el problema al hacer esto, cambia a Doctrine 1.2:) n Estoy usando la configuración yamlDoctrina: extendiendo la clase de entidad

+0

¿por qué desea ampliarlo? – jere

+0

Me gustaría crear una nueva clase que amplíe la base, algo así como User extends UserBase. Actualmente, todas las clases base están en Entidades/Base así que me gustaría crear nuevas clases en Entidades y extenderán Entidades/Clases base – mkk

+0

@jaro Me gustaría seguir el patrón de Doctrine 1.2 que tengo clases base y normales. Extiendo clases base para poder escribir mis propios métodos personalizados. El problema es que las clases base se generan automáticamente y no quiero perder el código cada vez que cambio algo en el modelo. – mkk

Respuesta

16

Doctrine 2.X Las entidades funcionan como POPO (objetos antiguos simples de PHP). Para lograr una extensión correcta, Doctrine le obliga a utilizar un concepto de JPA denominado Superclase mapeado. La idea es bastante simple. Siempre que desee tener una clase base y desee que sus entidades se extiendan desde ella (no estoy hablando de herencia a nivel de base de datos), todo lo que necesita hacer es crear su clase base como MappedSuperClass.

Aquí es un ejemplo: http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses

Gracias

+0

He hecho algo similar, gracias por el esfuerzo, aunque el problema se ha solucionado hace unos días, marcaré su respuesta como correcta – mkk

+2

Podrías haber publicado la solución, ya sabes. El propósito de esta comunidad es ayudarse unos a otros. –

+0

@NikolaPetkanski tiene el 100% de razón, y puede observar que respondo mi propia pregunta si encuentro una solución. – mkk

2

Aquí la solución de enlace Guilherme Blanco. Me gustaría tener una solución publicada en lugar de un enlace que finalmente ya no podría funcionar en el futuro:

<?php 
/** @MappedSuperclass */ 
class MappedSuperclassBase 
{ 
    /** @Column(type="integer") */ 
    protected $mapped1; 

    /** @Column(type="string") */ 
    protected $mapped2; 

    /** 
    * @OneToOne(targetEntity="MappedSuperclassRelated1") 
    * @JoinColumn(name="related1_id", referencedColumnName="id") 
    */ 
    protected $mappedRelated1; 

    // ... more fields and methods 
} 

/** @Entity */ 
class EntitySubClass extends MappedSuperclassBase 
{ 
    /** @Id @Column(type="integer") */ 
    private $id; 

    /** @Column(type="string") */ 
    private $name; 

    // ... more fields and methods 
} 
Cuestiones relacionadas