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

Problema con los gets de atributos en Doctrine 2

Estas en el tema de Problema con los gets de atributos en Doctrine 2 en el foro de Symfony en Foros del Web. Hola a todos! Estoy trabajando con un proyecto de encuestas en Symfony2 y llevo tiempo intentando solucionar un problema que me trae de cabeza... Resulta ...
  #1 (permalink)  
Antiguo 30/05/2012, 05:32
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 1
Pregunta Problema con los gets de atributos en Doctrine 2

Hola a todos!

Estoy trabajando con un proyecto de encuestas en Symfony2 y llevo tiempo intentando solucionar un problema que me trae de cabeza...

Resulta que las encuestas tienen preguntas de distintos tipos, cada una con sus atributos, así que la clase "Pregunta" se divide en subclases. A su vez, las preguntas de selección se dividen en preguntas con una única respuesta y con varias, quedando dos subclases para la clase "Seleccion".

Así pues, tenemos una superclase "Pregunta", con varias subclases, entre ellas la subclase "Seleccion", y ésta tiene dos subclases "SelUnica" y "SelMultiple". El código de estas clases lo adjunto al final.

El problema que tengo es a la hora de recuperar datos en la clase "Seleccion". Los sets que genera Doctrine 2 funcionan correctamente y los datos se guardan correctamente en BBDD. Pero he podido comprobar que los gets no recuperan los datos ya en la entidad, en los gets generados por Doctrine.

Lo único que le veo de especial es que esta clase tiene superclase y subclases. Además solo ocurre con los atributos de la clase, las relaciones se recuperan correctamente porque la clase "Seleccion" está relacionada con "Opcion" y se recuperan correctamente.

A continuación, los códigos de las entidades sin los gets y los sets que genera Doctrine 2:

Clase "Pregunta":
Código PHP:
/**
 * @ORM\Entity(repositoryClass="Proyecto\EncuestasBundle\Entity\Repositorios\PreguntaRepository")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="tipo_pregunta", type="string")
 * @ORM\DiscriminatorMap({"SU" = "SelUnica", "SM" = "SelMultiple", "VE" = "ValorEntero", "VD" = "ValorDecimal", "TX" = "Texto"})
 */
abstract class Pregunta
{
    
/**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="IDENTITY")
    */
    
protected $id;
    
/**
    * @ORM\Column(type="integer")
    * @Assert\Type(type="numeric", message="El campo 'Orden' tiene que ser numérico")
    */
    
protected $orden;
    
/**
    * @ORM\Column(type="boolean")
    * @Assert\Type("boolean")
    */
    
protected $respuesta_obligatoria;
    
/**
    * @ORM\Column(type="string")
    * @Assert\NotBlank(message="El campo 'Texto' es obligatorio")
    */
    
protected $texto;
    
/**
    * @ORM\ManyToOne(targetEntity="Encuesta", inversedBy="preguntas")
    * @ORM\JoinColumn(name="encuesta_id", referencedColumnName="id")
    */
    
protected $encuesta;

    
/**** Aquí vendrían los métodos generados por Doctrine ****/

Clase "Seleccion":
Código PHP:
/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="tipo_seleccion", type="string")
 * @ORM\DiscriminatorMap({"SU" = "SelUnica", "SM" = "SelMultiple"})
 */
abstract class Seleccion extends Pregunta
{
    
/**
    * @ORM\Column(type="string")
    * @Assert\Choice({"Horizontal", "Vertical"})
    */
    
protected $tipo_presentacion;
    
/**
    * @ORM\Column(type="boolean")
    * @Assert\Type("boolean")
    */
    
protected $opciones_con_imagenes;
    
/**
    * @ORM\OneToMany(targetEntity="Opcion", mappedBy="seleccion")
    */
    
protected $opciones;

    
/**** Aquí vendrían los métodos generados por Doctrine ****/

Clase "SelUnica":
Código PHP:
/**
 * @ORM\Entity
 */
class SelUnica extends Seleccion
{
    
/**** Aquí vendrían los métodos generados por Doctrine ****/

    
Get tipo_pregunta
    
*
         * @var 
string
         
*/
        public function 
getTipoPregunta()
        {
            return 
'SU';
        }

Clase "SelMultiple":
Código PHP:
/**
 * @ORM\Entity
 */
class SelMultiple extends Seleccion
{
    
/**
    * @ORM\Column(type="integer", nullable="true")
    * @Assert\Type(type="numeric", message="El número mínimo de respuestas tiene que ser numérico")
    */
    
protected $min_respuestas;
    
/**
    * @ORM\Column(type="integer", nullable="true")
    * @Assert\Type(type="numeric", message="El número máximo de respuestas tiene que ser numérico")
    */
    
protected $max_respuestas;

    
/**** Metodos generados ****/
    
    
Get tipo_pregunta
    
*
         * @var 
string
         
*/
        public function 
getTipoPregunta()
        {
            return 
'SM';
        }

No sé si hago algo mal a la hora de declarar las clases con los comentarios de Doctrine o es un problema de Doctrine que se hace un lío con subclases de subclases y ya no sé ni por dónde mirar. Cualquier consejo o sugerencia será bienvenido

Un saludo!
  #2 (permalink)  
Antiguo 30/05/2012, 05:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Problema con los gets de atributos en Doctrine 2

Que tal JPunto,

Antes que nada, bienvenido a FdW, ahora en relación a tu pregunta, el discriminator va en la clase mas alta, esta de mas en la clase Seleccion, esta clase debería ser igual que el resto de clases que heredan.

Código PHP:
Ver original
  1. /**
  2.  * @ORM\Entity
  3.  */
  4. abstract class Seleccion extends Pregunta
  5. { }

Y es un tema de Doctrine 2, no tiene relación alguna al fw que estés utilizando.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 01/06/2012, 07:27
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Problema con los gets de atributos en Doctrine 2

Muchas gracias por la aclaración, masterpuppet!

Ya lo he corregido tal y como has dicho y he ejecutado el generador de entidades para que Doctrine interprete los comentarios. Sin embargo, el problema persiste. Alguna otra sugerencia?

Un saludo!

Última edición por JPunto; 05/06/2012 a las 02:35
  #4 (permalink)  
Antiguo 15/11/2012, 05:30
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Problema con los gets de atributos en Doctrine 2

He seguido desarrollando la aplicación ignorando este problema que sigue sin resolver. Aún no sé si es problema mío o si es un problema de Doctrine.

En este tiempo he pasado a la versión 2.1 de Symfony, que utiliza la versión 2.1 de Doctrine 2, pero el problema persiste.

Si no encuentro solución, tendré que hacer una chapuza, y sería una lástima porque este framework me ha permitido desarrollar un proyecto bastante limpio.

Nadie tiene ninguna idea de qué ocurre?

Pego el link con el código completo por si sirve de ayuda:
[URL="http://pastebin.com/XurWLsst"]http://pastebin.com/XurWLsst[/URL]

Etiquetas: doctrine2, symfony2
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:20.