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:
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.SELECT r, o.orden FROM Proyecto\EncuestasBundle\Entity\RespuestaEncuesta r JOIN r.opciones o WITH o.seleccion = ?1 WHERE r.publicacion = ?2
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();
Un saludo!