2011-03-30 20 views
8

के साथ इकाई पर getArrayResult का पालन करें मूल सारणी (एक से कई रिश्ते)
क्लाइंट - कई उपयोगकर्ता हैं।
उपयोगकर्ता - प्रत्येक उपयोगकर्ता एकल ग्राहक से संबंधित है।ManyToOne एसोसिएशन

  1. वास्तविक उत्पन्न एसक्यूएल विदेशी कुंजी क्षेत्र लौटे (यानी ClientID)
  2. होने के लिए शामिल हैं:

    एक बहुत ही सरल उदाहरण में अगर मैं getArrayResult() साथ उपयोगकर्ता इकाई (Querybuilder) क्वेरी मैं निम्न देखें

  3. वास्तविक लौटाए गए डेटा सरणी में विदेशी कुंजी फ़ील्ड नहीं है।

इस चरण में मुझे विदेशी डेटा वापस करने की आवश्यकता नहीं है और इसलिए संबंधित तालिका में शामिल होने के लिए की आवश्यकता नहीं है।

तो सवाल है ...
मैं अपने सरणी में विदेशी कुंजी मान को कैसे या कैसे वापस कर सकता हूं?

क्वेरी है:

$qb = $this->_em->createQueryBuilder(); 
    $qb->select('e'); 
    $qb->from('Entity\User', 'e'); 

एसक्यूएल है:

SELECT w0_.Id AS Id0, w0_.Name AS Name2, w0_.ClientID AS ClientID7 
FROM users w0_ 

उत्तर

16

करने की कोशिश करो इसे निष्पादित करने से पहले क्वेरी (0 निर्माता नहीं) पर HINT_INCLUDE_META_COLUMNS क्वेरी संकेत सेट करें।

$q->setHint(Query::HINT_INCLUDE_META_COLUMNS, true); 
+0

बहुत बहुत धन्यवाद, इसने मेरी समस्या को हल किया ... कार्य को छोड़कर '$ q-> setHint() 'addHint() के विपरीत है। क्या आप तदनुसार जवाब अपडेट कर सकते हैं? – MarkOfSine

+0

क्या यह काम नहीं करेगा यदि मैं चुनिंदा वक्तव्य (पूरी इकाई के विपरीत) में केवल विदेशी कुंजी फ़ील्ड को आज़माकर पकड़ता हूं? यह मेरे लिए प्रतीत नहीं होता है। –

+0

वास्तव में महान धोखा – rabudde

0

जहाँ तक मुझे पता है, आप ऐसा नहीं कर सकते, क्योंकि ClientID उपयोगकर्ता की संपत्ति नहीं है। उपयोगकर्ता की संपत्ति $ क्लाइंट की तरह है, और उस क्लाइंट इकाई के पास $ आईडी है।

यह आपको भ्रमित कर रहा है क्योंकि आप एंटिट्स से निपट रहे हैं लेकिन आप अभी भी एसक्यूएल में सोच रहे हैं।

समाधान है, हालांकि थोड़ा कम कुशल, शायद अपनी DQL क्वेरी में क्लाइंट इकाई शामिल होने के लिए किया जाएगा, और फिर $results[N]['client']['id'] मिल (या इसी तरह, मैं getResultArray साथ भी परिचित नहीं कर रहा हूँ())

+2

यह वह समाधान है जिसका मैं उपयोग कर रहा था, और सराहना करता हूं कि मुझे 'संस्थाएं और ओआरएम' सोचना चाहिए, एसक्यूएल नहीं ... लेकिन हम अभी भी कुशल एसक्यूएल उत्पन्न करना चाहते हैं। हम वास्तव में अनावश्यक रूप से किसी अन्य तालिका में शामिल नहीं होना चाहते हैं। बहुत अक्षम हालांकि टिप्पणी के लिए धन्यवाद ... – MarkOfSine

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