sql >> Databasteknik >  >> RDS >> Mysql

Hur fungerar inre sammanfogning på ett många-till-många-förhållande med hjälp av Doctrine och Symfony2

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


  1. Att komma runt MySQL Kan inte öppna tabellfel igen

  2. SQL-indexering på varchar

  3. LOAD_FILE returnerar NULL

  4. Kör alla SQL-filer i en katalog