Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] herencia con Doctrine2

Estas en el tema de herencia con Doctrine2 en el foro de Symfony en Foros del Web. Hola amigos, les explico mi pequeña inquietud. He leído la documentación de Doctrine pero me generan dudas a la hora de implementar una jerarquía de ...
  #1 (permalink)  
Antiguo 26/11/2014, 11:28
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años
Puntos: 2
herencia con Doctrine2

Hola amigos, les explico mi pequeña inquietud. He leído la documentación de Doctrine pero me generan dudas a la hora de implementar una jerarquía de herencias.

Tengo la siguiente entidad que representaría a una súper clase:

Código:
/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"club" = "Competicion_Club", "seleccion" = "Competicion_Seleccion"})
 */
class Competicion
{
    /** @ORM\Column(type="string") */
    private $nombre;
    
    /** @ORM\Column(type="string" , columnDefinition="ENUM('m', 'f')") */
    private $genero;
    
    /** @ORM\Column(type="string") */
    private $discr;
}
Y dos sub-clases que heredan de la anterior clase

Código:
/** @ORM\Entity */
class CompeticionClub
{
    /** @ORM\Column(type="integer") */
    private $orden;
    
    /** @ORM\Column(type="boolean") */
    private $extinguido;
}
Código:
/** @ORM\Entity */
class CompeticionSeleccion
{
    /** @ORM\Column(type="integer") */
    private $anno;
}
Quería saber cómo establecer la relación entre estas entidades, si debo definir el atributo id solamente para la súper-clase o para las sub-clases
  #2 (permalink)  
Antiguo 26/11/2014, 13:48
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: herencia con Doctrine2

Cita:
Iniciado por weltxo Ver Mensaje
Hola amigos, les explico mi pequeña inquietud. He leído la documentación de Doctrine pero me generan dudas a la hora de implementar una jerarquía de herencias.

Tengo la siguiente entidad que representaría a una súper clase:

Código:
/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"club" = "Competicion_Club", "seleccion" = "Competicion_Seleccion"})
 */
class Competicion
{
    /** @ORM\Column(type="string") */
    private $nombre;
    
    /** @ORM\Column(type="string" , columnDefinition="ENUM('m', 'f')") */
    private $genero;
    
    /** @ORM\Column(type="string") */
    private $discr;
}
Y dos sub-clases que heredan de la anterior clase

Código:
/** @ORM\Entity */
class CompeticionClub
{
    /** @ORM\Column(type="integer") */
    private $orden;
    
    /** @ORM\Column(type="boolean") */
    private $extinguido;
}
Código:
/** @ORM\Entity */
class CompeticionSeleccion
{
    /** @ORM\Column(type="integer") */
    private $anno;
}
Quería saber cómo establecer la relación entre estas entidades, si debo definir el atributo id solamente para la súper-clase o para las sub-clases
Defines el id en la super clase.
Por cierto esta parte no es necesaria en la clase:
Código PHP:
Ver original
  1. /** @ORM\Column(type="string") */
  2.     private $discr;

Y para la parte donde estas usando ENUM seria bueno que leas esto: http://doctrine-orm.readthedocs.org/...sql-enums.html
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 27/11/2014, 04:29
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años
Puntos: 2
Respuesta: herencia con Doctrine2

Cita:
Iniciado por hhs Ver Mensaje
Defines el id en la super clase.
Por cierto esta parte no es necesaria en la clase:
Código PHP:
Ver original
  1. /** @ORM\Column(type="string") */
  2.     private $discr;

Y para la parte donde estas usando ENUM seria bueno que leas esto: [URL]http://doctrine-orm.readthedocs.org/en/latest/cookbook/mysql-enums.html[/URL]
Perfecto, pero una pregunta, en MySQL las tablas de las sub-clases las defino sin ID? Cómo sabe cada registro de la sub-clase a qué registro apunta de la súper-clase? No tendría que definir por ejemplo un atributo competicion_id apuntando la id de la súper-clase (1:1)?¿

Última edición por weltxo; 27/11/2014 a las 04:49
  #4 (permalink)  
Antiguo 27/11/2014, 10:46
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: herencia con Doctrine2

Tienes dos opciones para esto, la primera es que no lo hagas tu y uses la consola de symfpny 2 para esto.
Código BASH:
Ver original
  1. #crear la base de datos
  2. app/console doctrine:database:create
  3. #crea tu eschema
  4. app/console doctrine:schema:create
La otra opción es la que comentas y para eso solo necesitas un FK apuntando al Id de la tabla que representa a la clase base de tu jerarquía de clases.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 29/11/2014, 08:55
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años
Puntos: 2
Respuesta: herencia con Doctrine2

Perfecto, después de mucho trastear y trastear, lo he conseguido. Agradezco a todas las personas que han escrito, gracias!

Etiquetas: doctrine2, herencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:44.