2014-10-24 16 views
12

के साथ सिद्धांत का उपयोग करके कई से अधिक रिश्तों पर पूछताछ मैं समझने की कोशिश कर रहा हूं कि कितने रिश्ते सिद्धांत और सिम्फनी 2 के साथ काम करते हैं।सिम्फनी 2

मैं उदाहरण के आधिकारिक दस्तावेज (goo.gl/GYcVE0) में दिखाया गया है निर्मित किया है और मैं दो इकाई वर्गों है: उपयोगकर्ता और समूह के रूप में आप नीचे देख सकते हैं।

<?php 
/** @Entity **/ 
class User 
{ 
    // ... 

    /** 
    * @ManyToMany(targetEntity="Group", inversedBy="users") 
    * @JoinTable(name="users_groups") 
    **/ 
    private $groups; 

    public function __construct() { 
     $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    // ... 
} 

/** @Entity **/ 
class Group 
{ 
    // ... 
    /** 
    * @ManyToMany(targetEntity="User", mappedBy="groups") 
    **/ 
    private $users; 

    public function __construct() { 
     $this->users = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    // ... 
} 

तो मैं अपने DB अद्यतन मैं इस MySQL स्कीमा प्राप्त करें:

CREATE TABLE User (
    id INT AUTO_INCREMENT NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE = InnoDB; 
CREATE TABLE users_groups (
    user_id INT NOT NULL, 
    group_id INT NOT NULL, 
    PRIMARY KEY(user_id, group_id) 
) ENGINE = InnoDB; 
CREATE TABLE Group (
    id INT AUTO_INCREMENT NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE = InnoDB; 
ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id); 
ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id); 

समस्या है Symfony2 में मैं इकाई एक प्रश्न उत्पन्न करने के लिए जरूरत है कि और इस मामले में मेरे पास नहीं है तालिका users_group से जुड़ी एक इकाई क्योंकि यह तालिका ढांचे द्वारा स्वचालित रूप से बनाई गई है।

तो, मैं इस संबंध तालिका से संबंधित जानकारी को कैसे प्राप्त कर सकता हूं? उदाहरण के लिए मुझे समूह में सभी उपयोगकर्ता प्राप्त करने की आवश्यकता है, जो उपयोगकर्ता हैं जिनके पास एक आईडी है जो तालिका users_group में दिखाई देती है।

मैं डीक्यूएल, क्वेरीबिल्डर या अन्य विधियों का उपयोग करके ऐसा कैसे कर सकता हूं?

बहुत बहुत धन्यवाद।

+0

आप अपने मानदंडों के लिए mysql क्वेरी लिख सकते हैं? इसलिए हम इसे डीक्यूएल क्वेरी –

+0

@ एम खालिद जुनैद में अनुवाद करने का प्रयास करेंगे उदाहरण के लिए मुझे समूह में सभी उपयोगकर्ताओं को प्राप्त करने की आवश्यकता है। कच्चे एसक्यूएल का उपयोग करना कुछ यू.आईडी, यू.नाम उपयोगकर्ताओं से, समूह जी, उपयोगकर्ता_ग्रुप ug जहां ug.group_id = 5 और u.id = ud.user_id चुनें। जैसा कि आप देख सकते हैं कि मुझे तालिका user_group से संबंधित इकाई की आवश्यकता है। –

उत्तर

21

आप

$em = $this->getContainer()->get('doctrine')->getManager(); 
$repository = $em->getRepository('YourNamespaceYourBundle:User'); 
$query = $repository->createQueryBuilder('u') 
    ->innerJoin('u.groups', 'g') 
    ->where('g.id = :group_id') 
    ->setParameter('group_id', 5) 
    ->getQuery()->getResult(); 

नीचे के रूप में एक में शामिल होने के DQL क्वेरी groupsUser में संपत्ति इकाई के लिए आपका मानचित्रण हिस्सा खुद में शामिल होने संभाल लेंगे लिख सकते हैं आप की जरूरत नहीं है अपने DQL क्वेरी में जंक्शन तालिका का उल्लेख

+1

धन्यवाद, बहुत उपयोगी ;-) –

+0

यदि समूह का नाम है और समूह आईडी नहीं है तो क्या प्रश्न होना चाहिए? – Vidhi

+1

@Vidhi समूह नाम के साथ जहां भाग को '-> कहां (' g.name =: group_name ') -> setParameter (' group_name ', $ group_name)' –