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

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

16 de septiembre de 2015

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.

@miguelplazasr

16 septiembre 2015, 22:00
#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();

@BrandoSalamanTW

18 septiembre 2015, 5:50