Usando
ManyToMany entre 2 entidades envolve uma terceira tabela geralmente chamada de tabela de junção neste tipo de relação quando você constrói uma doutrina DQL (doctrine query) a doutrina junta automaticamente a tabela de junção dependendo da natureza da relação que você definiu como anotação considerando sua consulta $teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Você está participando da
Team entidade com Group entidade em innerJoin('o.group') parte o é o alias para a entidade Team e o.group refere-se à propriedade definida em Team entidade nomeada como group . /**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Que tem um
ManyToMany anotação definida para este tipo de relação doutrina junta sua tabela de equipe primeiro com a tabela de junção e depois junta sua tabela de junção com a tabela de grupos e o SQL resultante será algo 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
Outra coisa relacionada à sua maneira de obter equipe para cada grupo, você pode minimizar seu código excluindo
createQueryBuilder parte dentro do loop, depois de definir a propriedade de equipes como ArrayCollection ou seja, $this->team = new ArrayCollection(); em cada objeto de grupo, você obterá coleções de equipes associadas a esse grupo específico chamando getTeam() função no objeto de grupo semelhante ao código abaixo. foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}