ManyToMany
का उपयोग करना जब आप एक डीक्यूएल (सिद्धांत क्वेरी) सिद्धांत बनाते हैं तो 2 संस्थाओं के बीच एक तीसरी तालिका शामिल होती है जिसे आम तौर पर इस प्रकार के संबंध में जंक्शन तालिका कहा जाता है।>
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
आप Team
में शामिल हो रहे हैं Group
. के साथ इकाई innerJoin('o.group')
. में इकाई भाग o
टीम इकाई और 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
को छोड़कर अपने कोड को छोटा कर सकते हैं लूप के भीतर भाग, एक बार जब आप टीम की संपत्ति को 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>";
}
}