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
Puedes poner una imagen de tu E-R (Entidad relación) para ver mejor las relaciones y poder ayudar.
@ramiroanacona
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
@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