Använder ManyToMany mellan 2 entiteter involverar en tredje tabell som allmänt kallas en kopplingstabell i denna typ av relation när du bygger en DQL (doktrinfråga) doktrin ansluter automatiskt kopplingstabell beroende på vilken typ av relation du har definierat som anteckning så med tanke på din fråga
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Du går med i Team enhet med Group enhet i innerJoin('o.group') del o är aliaset för Team-entitet och o.group hänvisar till egenskapen definierad i Team enhet namngiven som group .
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Som har en ManyToMany annotering definierad för den här typen av relationsdoktrin förenar din lagtabell först med kopplingstabell och ansluter sedan din kopplingstabell med grupptabell och den resulterande SQL kommer att vara ungefär som
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
En annan sak relaterade till ditt sätt att få team för varje grupp. Du kan minimera din kod genom att utesluta createQueryBuilder del inom loop, när du har definierat teams-egenskapen som ArrayCollection dvs $this->team = new ArrayCollection(); på varje gruppobjekt får du samlingar av team som är associerade till den specifika gruppen genom att anropa getTeam() funktion på gruppobjekt liknande koden nedan.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}