2012-09-19 20 views
8

मुझे डॉक्टर मॉडल hydrate() विधि के साथ एक छोटी सी समस्या है। मैं तो जैसे किसी दिए गए सरणी से conrete मॉडल की एक वस्तु हाइड्रेट करने के लिए इस विधि का उपयोग:सिद्धांत 1.2 हाइड्रेट विधि - मॉडल ऑब्जेक्ट के लिए सरणी

$model = new Doctrine\Model\Model; 
$model->hydrate($model_array); 

सब कुछ सही काम करता है जब नेस्ट उप मॉडल withou सरल वस्तुओं hydrating। अब समस्या यह है कि मुझे हाइड्रेट (इस विधि का उपयोग करके) एक ऑब्जेक्ट है जिसमें नेस्टेड ऑब्जेक्ट्स हैं (और उनमें से कुछ ने नेस्टेड ऑब्जेक्ट्स भी हैं)।

यदि मैं HYDRATE_RECORD का उपयोग कर रहा था तो यह ठीक होगा लेकिन क्वेरी से सभी रिकॉर्ड ऑब्जेक्ट्स के रूप में वापस लौटाए जाएंगे जिसका अर्थ है कि अधिक मेमोरी खपत। इसलिए मैं और मांग पर हाइड्रेट का उपयोग कर रहा हूं जो एक वस्तु के लिए ठोस सरणी है।

मान लें कि मेरे पास एक मॉडल ए है जिसमें मॉडल एबी, एसी (एक से कई तक) घोंसला है, एडी और एसी के पास एक और नेस्टेड मॉडल एसीई है।

A Array (
    ... 
    ab Array (...) 
    ac Array (
     AC Array (
      ... 
      ace Array (...) 
     ) 
     AC Array (
      ... 
      ace Array (...) 
     ) 
     ... 
    ) 
    ad Array (...) 
) 

आम तौर पर हाइड्रेट उपयोग करने के बाद मुझे लगता है है कि यह मेरी वस्तु होगा::

A Object { 
    ... 
    ab Object { ... } 
    ac Array (
     AC Object { 
      ... 
      ace Object { ... } 
     } 
     AC Object { 
      ... 
      ace Object { ... } 
     } 
     ... 
    ) 
    ad Object { ... } 
} 

लेकिन बजाय इस बात का है कि मैं इस संरचना मिलती है:

एक सरणी के print_r के बाद हम इस संरचना देख सकते हैं
A Object { 
    ... 
    ab Array (...) 
    ac Array (
     AC Array (
      ... 
      ace Array (...) 
     ) 
     AC Array (
      ... 
      ace Array (...) 
     ) 
     ... 
    ) 
    ad Array (...) 
} 

तो केवल मुख्य मॉडल किसी ऑब्जेक्ट में परिवर्तित हो गया। क्या आप इस बारे में जानते हैं कि सभी नेस्टेड मॉडल सरणी को परिणामस्वरूप किसी ऑब्जेक्ट में कैसे परिवर्तित किया गया है?

और नहीं, मैं डीबी से पूछताछ करते समय HYDRATE_RECORD का उपयोग नहीं कर सकता।

+0

@ j0k मुझे उत्तर के लिए धन्यवाद क्यों नहीं देना चाहिए? – shadyyx

+3

साइट नीति, कोई साइन ऑफ नहीं, धन्यवाद, वास्तविक प्रश्न में उस तरह की चीज - क्योंकि यह सवाल का हिस्सा नहीं है। टिप्पणियों में ठीक है। – Orbling

+2

देखें [यह धागा] (http://meta.stackexchange.com/q/2950/182741)। – j0k

उत्तर

1

this पर ठोकर खाए जाने पर प्रलेखन के माध्यम से देख रहे हैं।

क्या आपने hydrate के बजाय fromArray पर आज़माया है?

+0

मैंने कोशिश की है कि 'fromArray() '। हालांकि मैं कुछ महीनों में उस परियोजना पर काम नहीं कर रहा हूं, मुझे आलसी लोडिंग का उपयोग करना था, जिसे मैं टालने की कोशिश कर रहा था ... अगर मैं उस परियोजना पर कुछ संशोधन कर रहा था, तो मैं इसे आज़मा दूंगा। अब के लिए आपका जवाब स्वीकार करेंगे क्योंकि यह वादा करता है! – shadyyx

0

मेरे डॉक्टरेट ज्ञान के सर्वोत्तम से इसका उत्तर देने का प्रयास करना, जो अधिक नहीं है क्योंकि मैंने कभी भी हाइड्रेशन के साथ सीधे व्यवहार नहीं किया।

हाइड्रेशन विधि के रूप में एक सरणी का उपयोग करने में समस्या यह है कि आप मूल रूप से तालिका नामों से जुड़े सभी मेटा डेटा को मूल रूप से खो देते हैं।

इसका समाधान आपके स्वयं के हाइड्रेशन विधि को लिखना हो सकता है जो सरणी को वस्तुओं में वापस परिवर्तित करता है।