सही और सबसे सुरक्षित दृष्टिकोण (लेकिन सबसे अच्छा नहीं - नीचे देखें) प्रश्न में वर्णित है - यह एक बार फिर उत्पाद लोड करना है।
कोई पहले से ही तरीकों को और अधिक विशेषताओं को जोड़ने के लिए, विकसित कर रहे हैं कई कारणों से के बाद उत्पाद भरी हुई है:
1) मॉडल जीवन एक बहुत अपने मूल्यों की गणना की और मॉडल के अंदर कैश की गई हो जाते हैं। इस प्रकार अधिक विशेषताओं को जोड़ना (उदाहरण के लिए मूल्य) मॉडल के राज्य को बदल देगा, लेकिन कई विधियों के परिणामों को प्रभावित नहीं करेगा, जो इन विशेषताओं मान (जैसे getPrice()) को वापस करने के लिए डिज़ाइन किए गए हैं, लेकिन आंतरिक रूप से कुछ अतिरिक्त प्रीप्रोकैसिंग करते हैं और पहले की गणना पर निर्भर करते हैं डेटा।
2) मॉडल का राज्य असंगत होगा, क्योंकि कुछ विधियां कैश किए गए हैं और वर्तमान में गैर-वैध मान, पिछले खाली विशेषता पर गणना की गई हैं, जबकि कुछ अन्य विधियां गैर-कैश किए गए मान लौटाएंगी। तो ऐसे मॉडल का उपयोग असुरक्षित होगा और इसकी संपत्ति अप्रत्याशित होगी।
3) ऐसे रीलोडिंग का समर्थन करने के लिए कोड की जटिलता काफी बड़ी है।
समाधान
1) पहला अच्छा समाधान (हालांकि भारी एक है) एक बार फिर से उत्पाद लोड करने के लिए है, हर बार अपने ब्लॉक/मॉडल/सहायक उस में गुण की विस्तारित सेट की जरूरत है।
2) बेहतर समाधान - सभी अतिरिक्त विशेषताओं वाले सभी उत्पादों के साथ नए संग्रह को लोड करना है, जब भी आप देखते हैं कि इन विशेषताओं की आवश्यकता होगी और मूल संग्रह में उन्हें नहीं होगा।
3) सबसे अच्छा समाधान - सभी आवश्यक विशेषताओं के साथ मूल उत्पाद संग्रह लोड करना है। कभी-कभी संग्रह संभव गुणों के सबसेट के साथ उत्पाद लोड करते हैं - मुख्य रूप से यह ईएवी अनुकूलन के लिए एक विरासत कोड है (अब डिफ़ॉल्ट तालिकाएं डिफ़ॉल्ट रूप से 'चालू' होती हैं और यह अनुकूलन आवश्यक नहीं है) या संभवतः जब संग्रह इंजन द्वारा संग्रह लोड किया जाता है (उदाहरण के लिए सौर Magento ईई में) जो, डिफ़ॉल्ट रूप से, अपने रिकॉर्ड में सभी विशेषताओं को स्टोर नहीं करता है।
3.1) आप जगह है, जहां यह instantiated है पर मूल संग्रह के लिए आवश्यक गुण जोड़ सकते हैं - के माध्यम से सवाल addAttributeToSelect($attributeNames)
विधि
3.2 में वर्णित) आप, विशेषताओं की सूची के लिए अपने गुण जोड़ सकते हैं स्वचालित रूप से बसा संग्रह।गुण सूची मॉड्यूल से मॉड्यूल में भिन्न होती है, और वे विभिन्न स्थानों पर संग्रहीत होती हैं। कुछ कॉन्फ़िगरेशन में हैं, अन्य - डेटाबेस में। कंक्रीट प्लेस (कॉन्फ़िगर या डीबी टेबल), जहां ऑटो-आबादी के लिए विशेषताओं को जोड़ना है, आपके ठोस मामले पर निर्भर करता है।
4) कभी-कभी, जब आपको केवल गुण मान की आवश्यकता होती है, तो संसाधन मॉडल लिखने के लिए यह बहुत आसान और तेज़ हो सकता है, जो सीधे उन्हें डीबी से productIds
और वर्तमान storeId
स्कोप से लोड कर देगा। फिर आप उन्हें किसी संग्रह में उत्पाद के गुणों के रूप में सेट कर सकते हैं या उन्हें myAdditionalAttribuesValuesArray
संपत्ति के रूप में सुरक्षित रूप से उत्पाद पर सेट कर सकते हैं या उत्पाद आईडी में मैप किए गए स्वतंत्र सरणी के रूप में उपयोग कर सकते हैं।
आप प्रतिबिंब की तकनीक की कोशिश की है के रूप में इवान इस सवाल में सुझाव है? http://stackoverflow.com/questions/5673093/sort-magento-collection-after-load या शायद Varien_Data_Collection की setDataToAll विधि? – OSdave
जब मुझे लापता डेटा के साथ उत्पाद मिलता है तो यह आमतौर पर एक श्रेणी पृष्ठ पर होता है जहां कुछ विशेषताओं को जानबूझकर बाहर रखा जाता है। उस से बचने के लिए व्यवस्थापक से विशेषता संपादित करें और इसे "उत्पाद प्रविष्टि में प्रयुक्त" में "हां" में बदलें। – clockworkgeek
@clockworkgeek: क्या यह एक सामान्य उद्देश्य समाधान है, जैसा कि "उत्पाद प्रविष्टि में प्रयुक्त" विशेषता विकल्प गलत है, और "हां" को चिह्नित करने से इसे संग्रह की डिफ़ॉल्ट विशेषता सूची में जोड़ दिया जाएगा? – Nick