2011-02-25 18 views
8

मैं सिद्धांत 2 के साथ एक देशी क्वेरी बनाने के लिए कोशिश कर रहा हूँ .. लेकिन मैं यह काम करता है नहीं कर सकते हैं ..सिद्धांत 2, मूल निवासी क्वेरी

$q = "SELECT * FROM user_recent_activity WHERE id = {$user->id}"; 
$rsm = new \Doctrine\ORM\Query\ResultSetMapping; 
$query = $this->_em->createNativeQuery($q, $rsm); 
$result = $query->getResult(); 

यह खाली सरणी लौटा रहा है .. मैं नहीं कर रहा हूँ यकीन है कि यह कैसे "ResultSetMapping" काम करता है, लेकिन मुझे लगता है कि इस प्रश्न के रूप में मैं सिद्धांत वेबसाइट में उदाहरण में देखा है के साथ कुछ भी नहीं मानचित्र नहीं कर सकते, क्योंकि यह एक मेज नहीं है user_recent_activity, वह इस तरह का दृश्य है:

id user_id type  created_at 
12 5  opinion 2011-02-22 23:29:00 
2 2  vote  2011-01-30 14:16:51 

आईडी का प्रतिनिधित्व विभिन्न वस्तुओं, इसलिए, विदेशी कुंजी नहीं हैं ..

तो, क्या यह सिर्फ डॉक्टर 2 के लिए सामान्य पूछताछ करना संभव है ?? .. मैं पागल होती जा रही हूँ ..

धन्यवाद

+0

यदि आपने अपनी समस्या हल की है, तो कृपया अपने प्रश्न को बंद करने या आपके समाधान को रेखांकित करने वाले उत्तर को प्रदान करने और स्वीकार करने के लिए ध्वजांकित करें। –

उत्तर

6

यह एक समस्या है, तो इसके लिए एक दृश्य या तालिका के रूप में आप पंक्तियों और स्तंभों आपकी क्वेरी से नहीं होना चाहिए।

आपको आरएसएम का उपयोग कर देशी एसक्यूएल प्रश्नों के लिए परिणामों को मैप करने की आवश्यकता है।

$rsm->addEntityResult('UserRecentActivity', 'u'); 
$rsm->addFieldResult('u', 'id', 'id'); 
$rsm->addFieldResult('u', 'user_id', 'user_id'); 
$rsm->addFieldResult('u', 'type', 'type'); 
$rsm->addFieldResult('u', 'created_at', 'created_at'); 

और आपके पास उचित इकाई भी होनी चाहिए।

अधिक विस्तृत उदाहरणों के लिए आप http://www.doctrine-project.org/docs/orm/2.0/en/reference/native-sql.html देख सकते हैं।

अद्यतन:

बार देखा गया है कि 1 से अधिक तालिका से परिणाम होता है के मामले में, addJoinedEntityResult() विधि उनके संबंधित संस्थाओं के लिए परिणाम मैप करने के लिए इस्तेमाल किया जा सकता। आपको संस्थाओं को तदनुसार परिभाषित करने और परिणामों को अपने क्षेत्रों में मैप करने की आवश्यकता है।

यह विधि शायद आंशिक वस्तुओं के साथ समाप्त हो जाएगी, इसलिए इसे डेटा भ्रष्टाचार से बचने के लिए सावधानी से उपयोग किया जाना चाहिए।

आंशिक वस्तुओं के बारे में जानकारी: http://www.doctrine-project.org/docs/orm/2.0/en/reference/partial-objects.html

+0

समस्या, यह एक दृश्य है, मैंने पहचानकर्ता/प्राथमिक कुंजी नहीं डाली, आईडी में जो आईडी आप देखते हैं, वह अन्य तालिका की आईडी है .. इसलिए मैं किसी इकाई का उपयोग नहीं कर सकता। शायद सामान्य सरणी प्राप्त करना संभव नहीं है? .. शायद मुझे सिर्फ प्राथमिक कुंजी डालना होगा और समस्या के बारे में भूलना होगा .. यहां तक ​​कि मुझे देशीQuery कॉल की आवश्यकता नहीं होगी .. लेकिन यह थोड़ा बदसूरत समाधान है। आपके समय के लिए धन्यवाद। – Raul

+0

हम्म, उस स्थिति में आप संबंधित इकाइयों को परिभाषित कर सकते हैं और अपनी इकाइयों को जानकारी मैप करने के लिए addJoinedEntityResult विधि का उपयोग कर सकते हैं। Http://www.doctrine-project.org/docs/orm/2.0/en/reference/native-sql पर ऐसे उदाहरण हैं।एचटीएमएल # उदाहरण। मुझे यकीन नहीं है कि यह काम करेगा हालांकि। आप सिद्धांत के साथ विचारों के बिना एक ही परिणाम प्राप्त कर सकते हैं, लेकिन मुझे नहीं पता कि कौन सा सर्वश्रेष्ठ प्रदर्शन करता है, न कि क्षेत्र में एक विशेषज्ञ। –

+0

इसे और अधिक विचार देने के बाद, addJoinedEntityResult विधि को काम करना चाहिए क्योंकि सिद्धांत मूल एसक्यूएल के साथ क्वेरी की प्रकृति की परवाह नहीं करता है, केवल इस बात की परवाह करता है कि यह संस्थाओं के लिए कैसे मैप किया गया है। तदनुसार जवाब अपडेट किया गया। –

1

आपकी समस्या के लिए अन्य संभावना अदिश परिणामों के साथ संयोजन के रूप में मूल निवासी प्रश्नों का उपयोग करने के लिए है। अधिक जानकारी के लिए, this लिंक, अनुच्छेद 12.2.4 देखें। उपयोगी होने की उम्मीद है।

1

एकल पंक्ति लाने के लिए

$result = $this->_em->getConnection()->fetchAssoc($sql) 

एकाधिक पंक्तियों

$result = $this->_em->getConnection()->fetchAll($sql) 

लाने के लिए यहाँ ऊपर $ एसक्यूएल के स्थान पर एसक्यूएल देशी क्वेरी का उपयोग करें।

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