Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/06/2012, 10:09
JPunto
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años, 6 meses
Puntos: 1
Recuperar datos de varias entidades a la vez mediante Doctrine 2

Hola a todos!

Estoy trabajando con Doctrine 2 y quiero recuperar los datos de dos entidades relacionadas entre sí en una relación de muchos a muchos. Estas dos entidades tienen que cumplir cada una unos requisitos y necesito recuperar todas las filas que cumplan esas condiciones.

Trabajando con SQL es tan sencillo como hacer una consulta y devolver los campos de las tablas que necesites, pero con Doctrine 2 no acabo de pillar la dinámica... Si por ejemplo hago la siguiente consulta:

Código:
SELECT r, o.orden FROM Proyecto\EncuestasBundle\Entity\RespuestaEncuesta r
	JOIN r.opciones o WITH o.seleccion = ?1
	WHERE r.publicacion = ?2
Puedo acceder a los datos de RespuestaEncuesta, pero al intentar acceder al dato "orden" me dice que no está definido el método (efectivamente, no está definido en la clase RespuestaEncuesta, sino en Opcion, que es la clase de dónde quiero recuperar el dato). Si llamo al método getOpciones de RespuestaEncuesta me devuelve un array de todas las opciones y estamos en las mismas, tengo que buscar el que cumple las condiciones.

También he intentado con SQL Nativo siguiendo las instrucciones en la documentación que he encontrado en la web, pero al ejecutar la consulta, la query no me devuelve ninguna fila, mientras que ejecutando exactamente la misma en el phpMyAdmin me devuelve resultados. Os adjunto el código por si podéis ayudarme en este frente:

Código PHP:
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Proyecto\EncuestasBundle\Entity\RespuestaEncuesta''r');
$rsm->addFieldResult('r''envio_id''id');
$rsm->addFieldResult('r''fecha_respuesta''fecha_respuesta');
$rsm->addJoinedEntityResult('Proyecto\EncuestasBundle\Entity\Opcion' 'o''r''opciones');
$rsm->addFieldResult('o''opcion_id''id');
$rsm->addFieldResult('o''texto''texto');
$rsm->addFieldResult('o''orden''orden');
$rsm->addJoinedEntityResult('Proyecto\EncuestasBundle\Entity\Usuario' 'u''r''usuario');
$rsm->addFieldResult('u''usuario_id''id');
$rsm->addFieldResult('u''nombre''nombre');
$rsm->addFieldResult('u''apellidos''apellidos');
        
$q 'SELECT r.id, r.fecha_respuesta, o.id, o.texto, o.orden, u.id, u.nombre, u.apellidos FROM RespuestaEncuesta r
    INNER JOIN respuesta_opcion ro ON r.id = ro.respuesta_id
    INNER JOIN opcion o ON o.id = ro.opcion_id AND o.seleccion_id = ?1
    INNER JOIN usuario u ON u.id = r.usuario_id
    WHERE r.publicacion_id = ?2'
;

$query $em->createNativeQuery($q$rsm)
    ->
setParameter(1$pregunta->getId())
    ->
setParameter(2$publicacion->getId());
$respuestasOpciones $query->getResult(); 
¿Cuál sería el planteamiento correcto para este problema? ¿Voy por buen camino en alguna de estas soluciones? Y en ese caso, ¿qué hago mal?

Un saludo!