sql >> Database >  >> RDS >> Mysql

Hoe werkt inner join in een veel-op-veel-relatie met Doctrine en Symfony2

ManyToMany gebruiken tussen 2 entiteiten omvat een derde tabel die over het algemeen wordt genoemd als een verbindingstabel in dit type relatie wanneer u een DQL-leer (doctrinequery) bouwt, voegt zich automatisch bij de verbindingstabel, afhankelijk van de aard van de relatie die u als annotatie hebt gedefinieerd, dus rekening houdend met uw vraag

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

Je wordt lid van Team entiteit met Group entiteit in innerJoin('o.group') deel o is de alias voor Team-entiteit en o.group verwijst naar eigenschap gedefinieerd in Team entiteit met de naam group .

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

Die een ManyToMany . heeft annotatie die is gedefinieerd voor dit type relatiedoctrine voegt zich eerst bij uw teamtabel met de verbindingstabel en voegt vervolgens uw verbindingstabel samen met de groepstabel en de resulterende SQL zal zoiets zijn als

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

Een ander ding heeft betrekking op uw manier om voor elke groep een team te krijgen. U kunt uw code minimaliseren door createQueryBuilder uit te sluiten onderdeel binnen lus, zodra u de teameigenschap hebt gedefinieerd als ArrayCollection d.w.z. $this->team = new ArrayCollection(); op elk groepsobject krijgt u verzamelingen van teams die aan die specifieke groep zijn gekoppeld door getTeam() aan te roepen functie op groepsobject vergelijkbaar met onderstaande code.

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


  1. Is dit een redelijk gebruiksscenario voor het opslaan van JSON in MySQL?

  2. Is er een versiebeheersysteem voor wijzigingen in de databasestructuur?

  3. Laravel 5.4 upgrade, converteren naar utf4mb van utf8

  4. Waarom de \G in SELECT * FROM tabelnaam\G?