2012-04-27 11 views
7

अरे लोग मैं बहु-अपडेट करने के लिए इस से बाहर एसक्यूएल याद कर रहा हूँ में SKU/UPCMagento बहु-अपडेट विशेषताओं

से जिम्मेदार बताते हैं रनिंग EE1.10 FYI करें

मैं सभी कोड के बाकी काम कर रहा है

लेकिन मैं "जो/क्या/ की क्यों वास्तव में हमारे गुण को अद्यतन करने, और नहीं उन्हें खोजने के लिए सक्षम किया गया है, मेरे तर्क है

  1. खुला एक सीएसवी निश्चित नहीं हूँ और में सभी SKU और संबद्ध attrib हड़पने एक 2 डी सरणी
  2. एक ENTITY_ID में SKU पार्स
  3. ENTITY_ID और विशेषता ले लो और जब तक समाप्त
  4. के बाद से शुक्रवार

यहाँ मेरी (लगभग समाप्त) कोड है की दिन के बाकी ले लो अद्यतन चलाने के लिए, मैं कुछ मदद की सराहना करता हूं।

/** 
    * FUNCTION: updateAttrib 
    * 
    * REQS: $db_magento 
    * Session resource 
    * 
    * REQS: entity_id 
    * Product entity value 
    * 
    * REQS: $attrib 
    * Attribute to alter 
    * 
    */ 

उत्पादन कोड काम करने के लिए मेरी प्रतिक्रिया देखें। उम्मीद है कि यह Magento समुदाय में किसी की मदद करता है।

उत्तर

24

हालांकि यह तकनीकी रूप से काम कर सकता है, आपके द्वारा लिखे गए कोड के बारे में आपको आखिरी तरीके से करना चाहिए।

Magento में, आपको वास्तव में कोड द्वारा प्रदान किए गए मॉडल का उपयोग करना चाहिए और स्वयं डेटाबेस डेटाबेस नहीं लिखना चाहिए।

अपने मामले में, यदि आपको 1 या कई उत्पादों के लिए विशेषताओं को अपडेट करने की आवश्यकता है, तो आपके लिए यह बहुत तेज़ तरीका है (और बहुत सुरक्षित रूप से)।

यदि आप इन्हें देखते हैं: /app/code/core/Mage/Adminhtml/controllers/Catalog/Product/Action/AttributeController.php आप पाएंगे कि यह नियंत्रक कई उत्पादों को तुरंत अपडेट करने के लिए समर्पित है।

आप saveAction() में देखें, तो ढंग से काम आप निम्न कोड पंक्ति मिलेगा:

Mage::getSingleton('catalog/product_action') 
    ->updateAttributes($this->_getHelper()->getProductIds(), $attributesData, $storeId); 

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

पहला पैरामीटर मूल रूप से उत्पाद आईडी की एक सरणी है। यदि आप केवल एक ही उत्पाद को अपडेट करना चाहते हैं, तो इसे केवल एक सरणी में रखें।

दूसरा पैरामीटर एक सरणी है जिसमें उन गुणों को शामिल किया गया है जिन्हें आप दिए गए उत्पादों के लिए अपडेट करना चाहते हैं।उदाहरण के लिए यदि आप 5 से $ 10 और वजन करने के लिए कीमत अद्यतन करने के लिए करना चाहता था के लिए, आप निम्नलिखित सरणी से होकर गुजरेगा:

array('price' => 10.00, 'weight' => 5) 

फिर अंत में, तीसरे और अंतिम विशेषता की दुकान आईडी यदि आप इन अपडेट करने के लिए क्या करना चाहते है। सबसे अधिक संभावना है कि यह संख्या या तो 1 या 0.

मैं इस फ़ंक्शन कॉल के साथ खेलूँगा और इसे अपने डेटाबेस प्रश्नों को लिखने और बनाए रखने के बजाय इसका उपयोग करूंगा।

+0

इसलिए यदि मैं उत्पाद कक्षा अद्यतन कर रहा हूं (जो स्पष्ट रूप से चीजों पर आंतरिक असर नहीं है, तो बाहरी) यह कैसे संबंधित है। – ehime

+1

@ जोश पेनिंगटन: अनुसंधान के महान टुकड़े के लिए +1 ... – Gowri

+0

तो आप इसे magento/shell/mycode.php में चलाते हैं? – aahhaa

0

जनरल अद्यतन क्वेरी किया जाएगा:

UPDATE 
    catalog_product_entity_[backend_type] cpex 
SET 
    cpex.value = ? 
WHERE cpex.attribute_id = ? 
    AND cpex.entity_id = ? 

क्रम [backend_type] विशेषता के साथ जुड़े को खोजने के लिए:

SELECT 
  backend_type 
FROM 
  eav_attribute 
WHERE entity_type_id = 
  (SELECT 
    entity_type_id 
  FROM 
    eav_entity_type 
  WHERE entity_type_code = 'catalog_product') 
AND attribute_id = ? 

आप निम्न ब्लॉग लेख से अधिक जानकारी प्राप्त कर सकते हैं:
http://www.blog.magepsycho.com/magento-eav-structure-role-of-eav_attributes-backend_type-field/

उम्मीद है कि यह आपकी मदद करता है।