2012-05-26 9 views
10

मैं सिद्धांत के साथ नेस्टेड क्वेरी लिखना चाहता हूं; नमूना एसक्यूएल नीचे की तरह है:इसे डॉक्ट्राइन 2 क्वेरीबिल्डर प्रारूप में कैसे परिवर्तित करें?

SELECT * FROM layer WHERE layer.id NOT IN 
       (SELECT task_id FROM users_tasks WHERE user_id = 1) 
AND parent_id IS NOT NULL AND leaf IS TRUE 

मैं दूसराSELECT बयान परिवर्तित समस्या है।

अग्रिम धन्यवाद।

मैं इसे createQueryBuildercreateQuery से बनाना चाहता हूं।

उत्तर

29

इस प्रयास करें:

1)

$subquery = $this->_em->createQueryBuilder() 
     ->select('t.id') 
     ->from('yourBundle:Task', 't') 
       ->innerjoin('t.user','u') 
       ->where('u.id = 1') 
     ->getDQL(); 

2) के बाद आपकी क्वेरी

$query = $this->_em->createQueryBuilder() 
       ->select('l') 
       ->from('yourBundle:Layer', 'l') 
      ->where($query->expr()->notIn('l.id', $subquery)) 
       ....; 

बनाने मैं इसे परीक्षण किया अपने सबक्वेरी बना सकते हैं और यह काम करता है :)

+0

मुझे 'createQueryBuilder' वाला एक चाहिए; – PMoubed

+0

मैं क्वेरी (ऊपर दिए गए विवरण) को संशोधित करता हूं –

+0

यह काम करता है। धन्यवाद। – PMoubed

1

ए एटबौदाद का जवाब मेरे लिए काम करता था, लेकिन मुझे लापता क्षेत्र से बचने के लिए सीधे डीक्यूएल का उपयोग करके सबक्वायरी बनाने की जरूरत थी। rrors। यह सही नहीं है लेकिन एक विश्वसनीय कामकाज प्रतीत होता है।

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

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