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>";
}
}