Utilizzo di ManyToMany
tra 2 entità coinvolge una terza tabella generalmente chiamata tabella di giunzione in questo tipo di relazione quando si costruisce una dottrina DQL (dottrina query) si unisce automaticamente alla tabella di giunzione a seconda della natura della relazione che hai definito come annotazione quindi considerando la tua query
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Ti stai unendo al Team
entità con Group
entità in innerJoin('o.group')
parte o
è l'alias per l'entità Team e o.group
si riferisce alla proprietà definita in Team
entità denominata come group
.
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Che ha un ManyToMany
l'annotazione definita per questo tipo di dottrina di relazione si unisce prima alla tabella del team con la tabella di giunzione e quindi alla tabella di giunzione con la tabella dei gruppi e l'SQL risultante sarà qualcosa di simile
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
Un'altra cosa relativa al tuo modo di ottenere team per ogni gruppo puoi ridurre a icona il tuo codice escludendo createQueryBuilder
parte all'interno del ciclo, dopo aver definito la proprietà del team come ArrayCollection
cioè $this->team = new ArrayCollection();
su ogni oggetto gruppo otterrai raccolte di squadre associate a quel particolare gruppo chiamando getTeam()
funzione sull'oggetto gruppo simile al codice seguente.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}