2012-03-29 5 views
6

में कई से अधिक क्वेरी मैं यह समझने की कोशिश कर रहा हूं कि सिद्धांत 2 में कई से अधिक क्वेरी कैसे करें और मुझे जवाब नहीं मिल रहा है। मुझे पता है कि मैं इसे सीधे एसक्यूएल में कैसे करूँगा:Doctrine 2

 SELECT ma.id, 
      ma.name 
     FROM user u 
     JOIN user_media_area uma ON uma.user_id = u.id 
     JOIN media_area ma ON uma.media_area_id = ma.id 

मैं सिद्धांत के साथ यह वही काम कैसे करूं?

+2

यह प्रश्न क्यों कम किया गया है? –

उत्तर

5

मैनुअल कुछ अच्छे उदाहरण है

// Build query 
    $em = $this->getEntityManager(); 
    $qb = $em->createQueryBuilder(); 

    $qb->addSelect('user'); 
    $qb->addSelect('mediaArea'); 

    $qb->from('SomeBundle:User','user'); 

    $qb->leftJoin('user.userMediaArea','userMediaArea'); 
    $qb->leftJoin('userMediaArea.mediaArea','mediaArea'); 

    $query = $qb->getQuery(); 
    $users = $query->getResult(); 
    echo $users[0]->getUserMediaArea()->getName(); 

आप अपने इकाई कोड पोस्ट नहीं तो मैं कुछ है आप कैसे परिभाषित पर अनुमान लगा करना पड़ा संबंध यदि आपके पास उपयोगकर्ता और मीडिया एरिया के बीच एक साधारण ManyToMany है तो आप UserMediaArea में शामिल हो सकते हैं। डी 2 इसे समझ जाएगा। और चूंकि आप वास्तव में केवल मीडियाएरिया की जानकारी चाहते हैं, मैं वास्तव में क्वेरी को उलट दूंगा और मीडियाएरिया से चयन करूँगा ताकि उपयोगकर्ता जानकारी को वापस करने की आवश्यकता न हो। लेकिन मैं आपकी मूल क्वेरी का पालन करने की कोशिश कर रहा था।

+0

धन्यवाद! वह काम किया। (मैंने आपके मूल कोड को कुछ हद तक संपादित किया है, लेकिन इस टिप्पणी के समय, संपादन को अभी तक सहकर्मी की समीक्षा नहीं की गई है।) विशेष रूप से वास्तव में मेरे प्रश्न को समझने और आपके उत्तर में मेरे इकाई नामों का उपयोग करके धन्यवाद। –

+0

@Cerad क्या आपको कोई विचार है कि परिणाम सेट मैपिंग के साथ मूल एसक्यूएल में इसे कैसे किया जाए। – hardik

+0

दुख की बात नहीं। कुछ मामलों में जहां मुझे एसक्यूएल (प्रदर्शन कारणों से) का उपयोग करना पड़ा, मैं खुद मैपिंग करता हूं। – Cerad

-1
SELECT ma.id, ma.name 
FROM User u 
JOIN u.media 

उपयोगकर्ता उपयोगकर्ता इकाई है, और u.media मीडिया इकाई है। http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html

अपने मामले में यह कुछ ऐसा दिखाई देगा में:

+1

उत्तर के लिए धन्यवाद। इसके PHP भाग के बारे में क्या? यह कैसे होगा? –

+0

$ sql = 'चुनें ma.id, ma.name यूजर से आप यू.मेडिया' में शामिल हों; \t $ परिणाम = $ इकाई प्रबंधक-> createQuery ($ sql) -> getResult(); –

+0

मैंने यह कोशिश नहीं की। नज़दीकी निरीक्षण पर, आपका डीक्यूएल मेरी जॉइन टेबल का भी उल्लेख नहीं करता है। आपकी मां कहां से आ रही है? इसके अलावा, मेरे पास 'मीडिया' नामक कुछ भी नहीं है। मुझे यकीन नहीं है कि आपने मेरा प्रश्न पढ़ा है या अपने उत्तर को बहुत सावधानीपूर्वक पढ़ा है। –

संबंधित मुद्दे