2011-09-23 15 views
5

मैं एक .NET PHP में परिवर्तित हूं और अब तक संक्रमण के साथ एक अच्छा समय है। मैं अपने ओआरएम के रूप में सिद्धांत 1.2 का उपयोग कर रहा हूं और मेरे मॉडल काम कर रहे हैं और सब ठीक जुड़ा हुआ है। हालांकि, अब जिस समस्या को मैं देख रहा हूं वह आउटपुट ऑब्जेक्ट्स बहुत बड़ा है। मेरे पास यूएसईआर नामक एक साधारण साधारण तालिका है - इसमें शायद 8 कॉलम और एफके 4 या 5 अन्य टेबल हैं। मैं नीचे हाइड्रेट करने के लिए मेरे उपयोगकर्ताओं आपत्ति कोड का उपयोग कर रहा:सिद्धांत वस्तुएं बड़ी हैं

$q = Doctrine_Query::create() 
->select('u.*') 
->from('USERS u') 
->where('u.VANITY_URL = ?',$Url_Frag); 

$users = $q->execute(); 

print_r($users); 

मैं वस्तु/अपने डेटा हाइड्रेटेड w तो यह अच्छी बात है देखते हैं। हालांकि, यह मेटा डेटा के समूह की तरह दिखता है जो मुझे स्पष्ट रूप से आवश्यकता नहीं है। कुल मिलाकर, वस्तु 5000+ लाइनों से अधिक लंबी है! मुझे यकीन है कि वहां एक स्पष्ट स्विच है जो मूल रूप से कहता है "केवल इस तरह के डेटा को छोड़ दें" लेकिन मैं इसे सिद्धांत मैनुअल में नहीं ढूंढ सकता।

विचार?

+0

उपयोग print_r ($ उपयोगकर्ताओं के> toArray()); बीटीडब्ल्यू, 5000 लाइनों का ऑब्जेक्ट होने पर कोई समस्या नहीं है। – Zeljko

उत्तर

1

आपके पास कई विकल्प हैं। एक को सिद्धांत 2 पर स्विच करना है: इसमें चिकना मॉडल हैं, बिना किसी जादू के जादू के 1।

दूसरा आपके हाइड्रेशन मोड को बदलना है। आप वास्तव में doctrine_record तर्क को बदले बिना किसी ऑब्जेक्ट के सिद्धांत मॉडल या मोटापा को ट्विक नहीं कर सकते हैं। तो यह काम हो सकता है:

$q = Doctrine_Query::create() 
->select('u.*') 
->from('USERS u') 
->where('u.VANITY_URL = ?',$Url_Frag) 
->setHydrationMode(Doctrine::HYDRATE_ARRAY); 
$users = $q->execute(); 

इन वस्तुओं Print_r'ing hughe हो जाएगा, के बाद से वहाँ सिद्धांत वर्ग नेटवर्क में कई नेस्टेड वस्तुओं (कुछ वस्तुओं "भगवान जटिल" उन में का एक सा है)।

अधिक प्रलेखन यहां पाया जा सकता: http://www.doctrine-project.org/documentation/manual/1_2/pl/data-hydrators:core-hydration-methods

1

अगर मैं भूल नहीं कर रहा हूँ, वहाँ Doctrine1.2 संस्थाओं में कुछ चक्र संदर्भ है, तो print_r या var_dump उन पर एक अच्छा विचार नहीं है कर रहे हैं। वास्तव में, यदि आप Xdebug की तरह कुछ है कि प्रत्यावर्तन गहराई की सीमा नहीं है, तो आप कभी नहीं ब्राउज़र के लिए उत्पादन मिलेगा।

तुम सच में स्मृति की खपत के कारण चिंतित हैं, पहले और जलयोजन के बाद स्मृति पदचिह्न की जांच करने के memory_get_usage समारोह का उपयोग करें।

7

Doctrine2 में, वहाँ पर एक dump() विधि उपलब्ध है:

\Doctrine\Common\Util\Debug::dump($var, $maxDepth) 

यह एक नौकरी print_r और var_dump के समान है, लेकिन सभी सिद्धांत से संबंधित डेटा छुपाता है।

हो सकता है कि सिद्धांत 1.x के लिए कुछ इसी तरह है?

6

सिद्धांत 1.2 संस्थाओं वस्तु और संग्रह के लिए एक विधि "toArray" नाम है। तो तुम कर सकते हैं:

print_r($users->toArray()); 
संबंधित मुद्दे