sql >> Databáze >  >> RDS >> Mysql

Jak funguje vnitřní spojení na vztahu many-to-many pomocí Doctrine a Symfony2

Pomocí ManyToMany mezi 2 entitami zahrnuje třetí tabulku obecně nazývanou jako spojovací tabulka v tomto typu vztahu, když vytváříte DQL (doktrínový dotaz), doktrína automaticky spojuje spojovací tabulku v závislosti na povaze vztahu, který jste definovali jako anotaci, takže s ohledem na váš dotaz

$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
                    ->createQueryBuilder('o')
                    ->innerJoin('o.group', 't')

Připojujete se k Team entity se Group entity v innerJoin('o.group') část o je alias entity Team a o.group odkazuje na vlastnost definovanou v Team entita pojmenovaná jako group .

/**
 * @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
 */
protected $group;

Který má ManyToMany anotace definovaná pro tento typ relační doktríny spojí vaši týmovou tabulku nejprve se spojovací tabulkou a poté spojí vaši spojovací tabulku s tabulkou skupin a výsledné SQL bude něco jako

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

Další věc týkající se vašeho způsobu získávání týmu pro každou skupinu můžete minimalizovat svůj kód vyloučením createQueryBuilder část ve smyčce, jakmile definujete týmovou vlastnost jako ArrayCollection tj. $this->team = new ArrayCollection(); u každého skupinového objektu získáte kolekce týmů přidružených k této konkrétní skupině voláním getTeam() funkce na skupinovém objektu podobná níže uvedenému kódu.

foreach ($groups as $group) {
    $teamsingroup = $group->getTeam();
    echo "</b>".$group->getGroupname()."</b></br>";
    foreach ($teamsingroup as $teamingroup) {
        echo $teamingroup->getTeam()."</br>";
    }
}


  1. Přeměna libovolně mnoha řádků na sloupce v PostgreSQL

  2. v tomto kontextu nerozumím json_agg

  3. jak nechat postgres ignorovat vložky s duplicitním klíčem, ale pokračovat

  4. Jak $_POST dynamicky přiřazenou hodnotu v PHP?