Mysql
 sql >> база данни >  >> RDS >> Mysql

Как вътрешното присъединяване работи върху връзка много към много, използвайки Doctrine и Symfony2

Използване на ManyToMany между 2 обекта включва трета таблица, обикновено наричана съединителна таблица в този тип релация, когато създавате DQL (доктринна заявка) доктрината автоматично се присъединява към съединителната таблица в зависимост от естеството на релацията, която сте дефинирали като анотация, така че вземайки под внимание вашата заявка

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

Вие се присъединявате към Team обект с Group обект в innerJoin('o.group') част o е псевдонимът на обекта Team и o.group се отнася до свойството, дефинирано в Team обект, наречен като group .

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

Което има ManyToMany анотация, дефинирана за този тип релационна доктрина, съединява вашата екипна таблица първо с съединителна таблица и след това съединява вашата съединителна таблица с групова таблица и полученият SQL ще бъде нещо като

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

Друго нещо, свързано с вашия начин за получаване на екип за всяка група, можете да минимизирате кода си, като изключите createQueryBuilder част в рамките на цикъл, след като сте дефинирали свойството на teams като ArrayCollection т.е. $this->team = new ArrayCollection(); на всеки групов обект ще получите колекции от екипи, свързани с тази конкретна група, като извикате getTeam() функция върху групов обект, подобен на кода по-долу.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli - извикване на грешка fetch_Array към функция-член fetch_array() на mysqli без обект

  2. MySQL:Как да направя тригер, който отхвърля непълнолетни служители?

  3. MySQL вмъкване на ред при дублиран ключ, актуализиране на множество колони

  4. Защо LEFT JOIN на MySQL връща NULL записи, когато е с клауза WHERE?

  5. Какъв е най-добрият начин за съхраняване на исторически ценоразпис в MySQL таблица?