2012-02-27 11 views
9

सिम्फनी फ्रेमवर्क में एक ऐप/कंसोल फ़ाइल है जो कुछ रखरखाव कार्यों को करने के लिए php के माध्यम से निष्पादित की जा सकती है। यह उपयोगकर्ताओं को डीक्यूएल प्रश्नों को भी चलाने की अनुमति देता है:सिद्धांत मुझे विशिष्ट फ़ील्ड का चयन नहीं करने देगा

# php app/console doctrine:query:dql --hydrate=array \ 
    'SELECT u.id, u.nameFirst, u.nameLast FROM DatabaseBundle:User u' 
array 
    0 => 
    array 
     'id' => string '1' (length=1) 
     'nameFirst' => string 'jaroslav' (length=8) 
     'nameLast' => string 'rakhmatoullin' (length=13) 
    1 => 
    array 
     'id' => string '2' (length=1) 
     'nameFirst' => string 'Båb Kåre' (length=10) 
     'nameLast' => string 'Ytrefoss' (length=8) 

ध्यान दें कि मैंने तीन विशिष्ट कॉलम चुने हैं। मेरी समस्या यह है कि एक समान क्वेरी मुझे एक त्रुटि देता है जब दो टेबल शामिल होते हैं।

# php app/console doctrine:query:dql --hydrate=array \ 
    'SELECT u.id , r FROM DatabaseBundle:User u JOIN u.roles r' 

    [Doctrine\ORM\Query\QueryException]     
    [Semantical Error] line 0, col -1 near 'SELECT u.id ,': 
    Error: Cannot select entity through identification variables 
    without choosing at least one root entity alias. 

निम्नलिखित रिटर्न पूरे उपयोगकर्ता अपनी भूमिकाओं के साथ शामिल हो गए:

# php app/console doctrine:query:dql --hydrate=array \ 
    'SELECT u, r FROM DatabaseBundle:User u JOIN u.roles r' 

जाहिर है, मैं कुछ याद कर रहा हूँ।

कोई विचार? मैं उचित दस्तावेज़ों के लिंक की भी सराहना करता हूं (इस विशिष्ट मामले पर)।

+1

मैं बहुत अच्छी तरह से त्रुटि संदेश को समझने नहीं है, लेकिन मैं इसी तरह की त्रुटि संदेश का सामना कर रहा है, और r.id का चयन करके अपनी समस्या को सुलझाने याद है, तो मुझे लगता है आप और अधिक क्षेत्रों का चयन करने की कोशिश करनी चाहिए। – greg0ire

+1

इसके बारे में क्या? '' यू.आई. चुनें, आर। * डाटाबेसबंडल से: यूजर यू यू यूरोल्स आर ' – jere

+1

ग्रेग 0यर सही है। मुझे लगता है कि आप इस तरह की क्वेरी में एक फ़ील्ड और "इकाई" ऑब्जेक्ट का चयन नहीं कर सकते हैं। – jere

उत्तर

28

documentation on "Partial Object Syntax" से:

डिफ़ॉल्ट रूप से जब आप सिद्धांत में एक DQL क्वेरी चलाने और किसी दिए गए इकाई के लिए खेतों का केवल एक उपसमूह का चयन करें, आप वस्तुओं वापस प्राप्त नहीं होता। इसके बजाए, आपको एक फ्लैट आयताकार परिणाम सेट के रूप में केवल सरणी मिलती हैं, इसी तरह आप कैसे करेंगे यदि आप सीधे एसक्यूएल का उपयोग कर रहे थे और कुछ डेटा में शामिल हो रहे थे।

यदि आप आंशिक वस्तुओं का चयन करना चाहते हैं तो आप आंशिक DQL कीवर्ड का उपयोग कर सकते हैं।

php console doctrine:query:dql --hydrate array \ 
    'SELECT partial s.{name ,id}, partial c.{name, id } 
    FROM DatabaseBundle:ProductCategories c 
    JOIN c.suppliers s ORDER BY s.name, c.name' 
+1

नोट, आपको प्राथमिक कुंजी शामिल करनी होगी आंशिक क्वेरी में - अन्यथा आपको एक ग़लत त्रुटि मिलती है। –

+2

दो साल बाद मैं अपने उत्तर को काफी समझ नहीं पा रहा हूं, लेकिन अगर मुझे सही याद है, तो कुंजी यह है कि: प्रत्येक उत्पाद श्रेणी को "सी" और प्रत्येक श्रेणी के रूप में मैप किया जाता है .supplier [] को मैप किया गया है। प्रत्येक श्रेणी में आपूर्तिकर्ताओं को उत्पाद श्रेणियों वर्ग में "@ एनोटेटेड-जॉइन" के माध्यम से मैप किया जाता है। सभी अप-वोटों के लिए धन्यवाद। मुझे लगता है कि 10 पर्याप्त है। –

+1

लेकिन क्या होगा यदि आप वास्तव में पूर्ण वस्तु वापस लेना चाहते हैं? मेरा मतलब है उदाहरण के लिए वस्तुओं के कुछ क्षेत्रों ए और फिर पूरी वस्तु बी? –

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