Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Cómo hacer consultas ManyToOne con Doctrine sobre cinco tablas relacionadas

23 de febrero de 2015

Hola a tod@s... un saludo

Tengo las siguientes 5 tablas: Usuario, Curso, Modulos, Items y ComentariosItems. En esta última almaceno los id de cada una de las anteriores, con una relación ManyToOne a cada una de las tablas.

Mi cuestión es que por ahora no sé cómo consultar bien con el QueryBuilder. Necesito consultar el Curso, el Modulo y el Item desde la tabla ComentariosItems y tener un array de todos los comentarios que se han hecho en este (n) ítem del módulo (n) del curso (n).

Desde ya, agradecido. Quedo atento. Saludos cordiales.


Respuestas

#1

Puedes poner una imagen de tu E-R (Entidad relación) para ver mejor las relaciones y poder ayudar.

@ramiroanacona

23 febrero 2015, 23:17
#2

Hola a tod@s...

Les comparto mi solución a esto. Quizás no fui claro en escribir lo que necesitaba.

Les comentaba arriba que tenía 5 tablas: cuatro de ellas las uso para guardar los id dentro de la 5ta. En la quinta genero la relación: - usuario_id, curso_id, modulo_id, item_id...

Y guardo otros datos que necesito dentro de esta relación: comentario, fecha, etc... Necesitaba generar la consulta a partir de los cuatro id de las tablas y generar un array.

Esto hice:

$em = $this->getDoctrine()->getManager();
 
  $comentarios = $em->getRepository('Bundle:ComentariosItems');
 
  $comentarios = $comentarios->createQueryBuilder('ci')
    ->where('ci.items = :item')
      ->andWhere('ci.modulos = :modulo')
      ->andWhere('ci.cursos = :curso')
    ->setParameter('item', $seccion)
      ->setParameter('modulo', $modulo)
      ->setParameter('curso', $curso)
    ->getQuery()
    ->getResult();

@cristian_angulo

24 febrero 2015, 3:55
#3

@cristian_angulo la solución que nos muestras es correcta para tu caso, pero no resulta habitual hacerlo así. Me explico: lo habitual no es relacionar todas las tablas mediante otra tabla en la que guardas todos los id.

Lo normal es relacionar tablas entre sí mediante alguna de sus propiedades. Después, en las consultas de Doctrine usas la instrucción JOIN para unir unas tablas con otras al hacer la consulta. Aquí tienes algunos ejemplos de esta técnica.

Obviamente no estoy diciendo que lo estés haciendo mal. En tu caso particular la solución que muestras podría ser la mejor. Pero para otras aplicaciones diferentes deberías tener en cuenta el uso de los JOINS de SQL/Doctrine.

@javiereguiluz

24 febrero 2015, 8:19