Usando ManyToMany
entre 2 entidades involucra una tercera tabla generalmente llamada tabla de unión en este tipo de relación cuando crea una DQL (consulta de doctrina) la doctrina automáticamente une la tabla de unión dependiendo de la naturaleza de la relación que haya definido como anotación, por lo que considere su consulta
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Te estás uniendo al Team
entidad con Group
entidad en innerJoin('o.group')
parte o
es el alias de la entidad Equipo y o.group
se refiere a la propiedad definida en Team
entidad nombrada como group
.
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Que tiene un ManyToMany
la anotación definida para este tipo de doctrina de relación une la tabla de su equipo primero con la tabla de unión y luego une su tabla de unión con la tabla de grupos y el SQL resultante será algo así como
SELECT t.*
FROM teams t
INNER JOIN junction_table jt ON(t.id = jt.team_id)
INNER JOIN groups g ON(g.id = jt.group_id)
WHERE g.id = @group_id
Otra cosa relacionada con su forma de obtener un equipo para cada grupo, puede minimizar su código excluyendo createQueryBuilder
parte dentro del ciclo, una vez que haya definido la propiedad de los equipos como ArrayCollection
es decir, $this->team = new ArrayCollection();
en cada objeto de grupo obtendrá colecciones de equipos asociados a ese grupo en particular llamando a getTeam()
función en el objeto de grupo similar al siguiente código.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}