Mysql
 sql >> Baza danych >  >> RDS >> Mysql

W jaki sposób sprzężenie wewnętrzne działa w relacji wiele-do-wielu przy użyciu Doctrine i Symfony2?

Korzystanie z ManyToMany między 2 jednostkami obejmuje trzecią tabelę ogólnie nazywaną tabelą połączeń w tego typu relacji, gdy budujesz doktrynę DQL (zapytanie doktrynalne) automatycznie łączy tabelę połączeń w zależności od natury relacji, którą zdefiniowałeś jako adnotację, więc biorąc pod uwagę twoje zapytanie

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

Dołączasz do Team encja z Group podmiot w innerJoin('o.group') część o jest aliasem encji Team i o.group odnosi się do właściwości zdefiniowanej w Team jednostka nazwana jako group .

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

Który ma ManyToMany adnotacja zdefiniowana dla tego typu doktryny relacji łączy najpierw tabelę zespołu z tabelą skrzyżowań, a następnie łączy tabelę skrzyżowań z tabelą grup, a wynikowy kod SQL będzie wyglądał następująco

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

Kolejną rzeczą związaną z twoim sposobem na pozyskanie zespołu dla każdej grupy możesz zminimalizować swój kod, wyłączając createQueryBuilder część w pętli, po zdefiniowaniu właściwości zespołów jako ArrayCollection tj. $this->team = new ArrayCollection(); na każdym obiekcie grupy otrzymasz kolekcje zespołów powiązanych z tą konkretną grupą, wywołując getTeam() funkcja na obiekcie grupy podobna do poniższego kodu.

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. Dodaj nowe źródło danych (mysql) wildfly

  2. Przekazywanie tablicy z PHP do JavaScript za pomocą JQuery i JSON

  3. serwer mysql zniknął błąd podczas instalacji migracji (laravel)

  4. Wtyczka „FEDERATED” jest wyłączona

  5. Jak stworzyć sekwencję w MySQL