Brug af ManyToMany
mellem 2 entiteter involverer en tredje tabel, der generelt kaldes en forbindelsestabel i denne type relation, når du bygger en DQL (doktrinforespørgsel) doktrin forbinder automatisk forbindelsestabel afhængigt af arten af relationen, du har defineret som annotering, så i betragtning af din forespørgsel
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Du tilslutter dig Team
enhed med Group
enhed i innerJoin('o.group')
del o
er alias for Team-entitet og o.group
henviser til egenskab defineret i Team
enhed navngivet som group
.
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Som har en ManyToMany
annotation defineret for denne type relationsdoktrin forbinder din teamtabel først med junction-tabel og forbinder derefter din junction-tabel med gruppetabel, og den resulterende SQL vil være noget lignende
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 anden ting relateret til din måde at få team til hver gruppe, du kan minimere din kode ved at ekskludere createQueryBuilder
del i loop, når du har defineret teams egenskab som ArrayCollection
dvs. $this->team = new ArrayCollection();
på hvert gruppeobjekt vil du få samlinger af teams knyttet til den pågældende gruppe ved at kalde getTeam()
funktion på gruppeobjekt svarende til nedenstående kode.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}