Verwenden von ManyToMany
zwischen 2 Entitäten beinhaltet eine dritte Tabelle, die bei dieser Art von Beziehung allgemein als Verbindungstabelle bezeichnet wird>
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Sie treten Team
bei Entität mit Group
Entität in innerJoin('o.group')
Teil o
ist der Alias für Teamentität und o.group
bezieht sich auf die in Team
definierte Eigenschaft als group
benannte Entität .
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Welches hat ein ManyToMany
Die für diese Art von Beziehungsdoktrin definierte Anmerkung verbindet zuerst Ihre Team-Tabelle mit der Junction-Tabelle und verbindet dann Ihre Junction-Tabelle mit der Gruppentabelle, und das resultierende SQL sieht in etwa so aus
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
Eine andere Sache im Zusammenhang mit Ihrer Art, ein Team für jede Gruppe zu erhalten, können Sie Ihren Code minimieren, indem Sie createQueryBuilder
ausschließen Teil innerhalb der Schleife, sobald Sie die Teams-Eigenschaft als ArrayCollection
definiert haben d.h. $this->team = new ArrayCollection();
für jedes Gruppenobjekt erhalten Sie Sammlungen von Teams, die dieser bestimmten Gruppe zugeordnet sind, indem Sie getTeam()
aufrufen Funktion für Gruppenobjekt ähnlich dem folgenden Code.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}