Menggunakan ManyToMany
antara 2 entitas melibatkan tabel ketiga yang umumnya disebut sebagai tabel persimpangan dalam jenis relasi ini ketika Anda membangun doktrin DQL (doktrin kueri) secara otomatis bergabung dengan tabel persimpangan tergantung pada sifat relasi yang telah Anda definisikan sebagai anotasi jadi pertimbangkan kueri Anda
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Anda bergabung dengan Team
entitas dengan Group
entitas di innerJoin('o.group')
bagian o
adalah alias untuk entitas Tim dan o.group
mengacu pada properti yang didefinisikan dalam Team
entitas bernama group
.
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Yang memiliki ManyToMany
anotasi yang ditentukan untuk jenis doktrin relasi ini menggabungkan tabel tim Anda terlebih dahulu dengan tabel persimpangan dan kemudian menggabungkan tabel persimpangan Anda dengan tabel grup dan SQL yang dihasilkan akan menjadi seperti
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
Hal lain terkait cara Anda mendapatkan tim untuk setiap grup, Anda dapat meminimalkan kode Anda dengan mengecualikan createQueryBuilder
bagian dalam loop, setelah Anda mendefinisikan properti tim sebagai ArrayCollection
yaitu $this->team = new ArrayCollection();
pada setiap objek grup Anda akan mendapatkan kumpulan tim yang terkait dengan grup tertentu dengan memanggil getTeam()
fungsi pada objek grup mirip dengan kode di bawah ini.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}