Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Recuperar datos de varias entidades a la vez mediante Doctrine 2

Estas en el tema de Recuperar datos de varias entidades a la vez mediante Doctrine 2 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/06/2012, 10:09
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años
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!
  #2 (permalink)  
Antiguo 14/06/2012, 08:24
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Recuperar datos de varias entidades a la vez mediante Doctrine 2

Independientemente de como lo hagas Doctrine siempre intentara cargar la colección completa, es una limitación de la mayoría de los ORM's, no permiten partial objects, pero(siempre hay un pero...) Doctrine tiene algo de soporte para Partials, igualmente no te lo recomiendo, lo normal es tirar el DQL para que te traiga el grafo de objetos y luego filtrar la colección de acuerdo a tus necesidades.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 14/06/2012, 08:48
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 12 años
Puntos: 1
Respuesta: Recuperar datos de varias entidades a la vez mediante Doctrine 2

Ok, gracias por la respuesta! Ya lo he implementado de otra manera. Solo era por saber algo de estas herramientas que ofrecían para ver si eran más eficientes.

Aunque si a alguien se le ocurre que puede fallar en las soluciones que planteo, que lo comente y aprendemos todos

Un saludo!

Etiquetas: doctrine2
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 13:59.