Doctrine sentecia DQL, para obtener datos relación muchos a muchos

Hola, espero me puedan ayudar, seguramente es algo fácil, pero me he perdido

Quiero obtener por medio de DQL, datos de estudiantes con la/s carreras que posee, de una relación muchos a muchos entre entidad estudiante y carrera, existe una tabla intermedia llamada pertenece:

Estudiante

/**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Carrera", inversedBy="idEstudiante")
     * @ORM\JoinTable(name="pertenece",
     *   joinColumns={
     *     @ORM\JoinColumn(name="id_estudiante", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="id_carrera", referencedColumnName="id")
     *   }
     * )
     */
    private $idCarrera;

Carrera

/**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Estudiante", mappedBy="idCarrera")
     */
    private $idEstudiante;

La intermedia posee los id de estudiante y carrera.

Estoy probando desde consola, el DQL que tengo es el siguiente

$ php app/console doctrine:query:dql "SELECT u, c  FROM Urt\EstudiantesBundle\Entity\Estudiante e JOIN e.pertenece p JOIN p.carrera c where e.carnet='XY90002'"

Me muestra este error:

[Doctrine\ORM\Query\QueryException]                                                                                                             
  [Semantical Error] line 0, col 77 near 'p where e.ca': Error: Class Ues\EstudiantesBundle\Entity\Estudiante has no association named pertenece

Por favor alguna orientación.

Gracias

Respuestas

#1

Si lo que quieres es mostrar el resultado en una plantilla de Twig, no tendrías la necesidad de hacer una consulta DQL, no se si esto te funcione:

{{ for estudiante in estudiantes }}
  {{ estudiante.nombre }} 
  <h3>Carreras</h3>
    {{ for carrera in estudiante.idcarrera }}
      {{ carrera.id }}
    {{ endfor }}
{{ endfor }}

Esa seria la idea. Pruébalo a ver si funciona.

#2

Hola @miguelplazasr, gracias por tu respuesta.

Pues sí la situación es un poco más compleja, además de mostrarlo en formulario, poseo atributos propios de la tabla que se encuentra en medio de las dos tablas que cité. Es decir registrar los atributos en la tabla que se forma en medio de las otras dos.

La consulta la logré solucionar con información en otra pregunta en este mismo foro, al final quedo así:

Desde la consola_

$ php app/console doctrine:query:dql "SELECT e.carnet, c.codigo  FROM 
Urt\EstudiantesBundle\Entity\Estudiante e INNER JOIN e.idCarrera c where e.carnet='XY90002'"

En la aplicación:

$dql="SELECT e.carnet, c.codigo, c.planestudio  FROM EstudiantesBundle:Estudiante e INNER JOIN e.idCarrera c  where e.carnet=:xcarnet";
 
$xresultados=$em->createQuery($dql)->setParameter('xcarnet', $xcarne)->getResult();