मैं एक ही आईडी "xxx" पहले से मौजूद "" आइटम (Mage_Catalog_Model_Product) कैसे ठीक कर सकता हूं?


18

उत्पादों के संग्रह को फ़िल्टर करने का प्रयास करते समय मुझे यह त्रुटि मिली है

Item (Mage_Catalog_Model_Product) with the same id "6058" already exist और पूछना चाहता था कि क्या त्रुटि हो सकती है क्योंकि मैगेंटो के अंदर एक ही आईडी के साथ केवल एक (दृश्यमान) उत्पाद है।

क्या कोई तालिका है जिसे इस द्वैध को हटाने के लिए साफ़ करने की आवश्यकता है?


क्या आप कुछ कोड जोड़ सकते हैं? आपको group byकेवल विशिष्ट उत्पाद आईडी प्राप्त करने के लिए उपयोग करने की आवश्यकता है । देखें Magento.stackexchange.com/questions/12773/…
स्टीवर्ट

जवाबों:


36

distinctस्वीकृत उत्तर में दिए गए सुझाव को जोड़ने से समस्या ठीक हो जाती है लेकिन इसमें प्रदर्शन संबंधी समस्याएं होती हैं। डेटाबेस किसी क्वेरी के साथ निष्पादित करते समय डिस्क पर अस्थायी तालिकाएँ बना सकता है distinctऔर यह आपके अनुरोध को धीमा कर देगा। आप इसके बजाय groupडुप्लिकेट को निकालने के लिए संग्रह में एक शर्त जोड़ सकते हैं ।

इस पोस्ट पर एक नज़र डालें । इकाई आईडी द्वारा उन्होंने जो किया (और मैंने यह भी किया है) समूह है। इससे बेहतर प्रदर्शन करना चाहिए।

//adding filters to the collection..

$collection->getSelect()
           ->group('e.entity_id');

क्या आप बता सकते हैं कि हमें इस कोड को कहाँ जोड़ना है
बेबी इन Magento

@BabyinMagento जहाँ भी आप अपने कस्टम कोड में अपने संग्रह का उपयोग कर रहे हैं। डेटाबेस से संग्रह लाने वाले कस्टम मॉड्यूल बनाते समय यह त्रुटि होती है। इसका मतलब यह है कि यह दिखा सकता है कि आपने हाल ही में तीसरे पक्ष के मॉड्यूल स्थापित किए हैं। उस स्थिति में, यह त्रुटि के स्थान का पता लगाने के लिए उक्त मॉड्यूल के डेवलपर पर निर्भर है।
विक

distinct()समाधान और इस क्वेरी, जो साधन आप देख के बिना डेटा खो सकता है से कोई अतिरिक्त रिकॉर्ड निकाल देंगे। तो यह सबसे अच्छा समाधान नहीं हो सकता है, जैसा कि मेरे मामले में है। मैं अब अपने सम्मिलित तालिका से संग्रह में दोनों रिकॉर्ड प्राप्त करने का एक तरीका खोजने की कोशिश कर रहा हूं ताकि मैं ग्रिड में एक ही पंक्ति में दोनों रिकॉर्ड दिखा सकूं।
जैक्स

थोड़ा ध्यान दें: इसका आयात इस संग्रह को श्रृंखलाबद्ध करने के लिए नहीं है, लेकिन फुर्सत के साथ अपने गुणांक को एक चर में डाल दिया और $ संग्रह करने की तुलना में-> getSelect () -> समूह ('e.entity_id');
रिकर्ट

मैं इस कोड को कहां अपडेट कर सकता हूं?
ज़ूस

7

आम तौर पर, यह डेटा में या संग्रह कार्यान्वयन में एक बग है।

यहाँ एक व्यापक मुद्दे का समाधान है। यह मनमाने संग्रह पर काम करता है, न केवल के लिए Catalog_Model_Product

चरण 1. संशोधित मूल फ़ाइल lib/Varien/Data/Collection.php, function addItem(), लेकिन विपरीत इस जवाब से पता चलता है, त्रुटि को छिपाने के नहीं है।

इसके बजाय, फेंके गए अपवाद में अतिरिक्त त्रुटि जानकारी जोड़ें:

        if (isset($this->_items[$itemId])) {
            throw new Exception('Item ('.get_class($item).
                ') with the same id "'.$item->getId().'" already exist' .
                '. SQL that caused this: ' . $this->getSelect());
        }

चरण 2. अपनी त्रुटि रिपोर्ट से आपत्तिजनक क्वेरी लें और इसे हाथ से चलाएं। देखें कि संग्रह कुंजी को कौन से रिकॉर्ड डुप्लिकेट करते हैं। order by <key field>आवश्यकतानुसार जोड़ें ।

भाग लेने वाली तालिकाओं को एक-एक करके क्वेरी को अलग करें, और देखें कि कौन सा रिकॉर्ड दोहराव का कारण बना।

मेरा मानना ​​है कि यह पैच कोर में होना चाहिए।


3

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

आप चुनिंदा ऑब्जेक्ट में एक अलग विधि जोड़कर लोड किए जा रहे संग्रह को बदल सकते हैं।

Http://framework.zend.com/manual/1.12/en/zend.db.select.html देखें

$db->select()
         ->distinct()

लेकिन यह अंतर्निहित समस्याओं के साथ आता है। अलग-अलग का उपयोग करने से डिस्क पर अस्थायी तालिकाओं का निर्माण होगा, मेमोरी में नहीं, जो प्रदर्शन दंड के साथ आता है।


0

मेरे मामले में

->getSelect()->group('e.entity_id');

मैं काम नहीं कर रहा हूं:

->getSelect()->group('main_table.entity_id');

चटाई कुछ एक के लिए भी hejpful हो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.