मैं बहुत सारे उत्पादों (10.000 से अधिक) के लिए मूल्य को अपडेट करने की कोशिश कर रहा हूं। जिस तरह से मैं अभी कर रहा हूं वह बेहद समय लेने वाला है। सभी उत्पादों के माध्यम से लूप और उनमें से अधिकांश को अपडेट करने का सबसे अच्छा तरीका कौन सा है?
धन्यवाद
मैं बहुत सारे उत्पादों (10.000 से अधिक) के लिए मूल्य को अपडेट करने की कोशिश कर रहा हूं। जिस तरह से मैं अभी कर रहा हूं वह बेहद समय लेने वाला है। सभी उत्पादों के माध्यम से लूप और उनमें से अधिकांश को अपडेट करने का सबसे अच्छा तरीका कौन सा है?
धन्यवाद
जवाबों:
हाय Magento नीचे दिए गए कोड द्वारा एक विशेषता प्रदान करते हैं
$product->setAttributeCode($newValue)
$ProductObject->getResource()->saveAttribute($product, 'attribute_Code');
$product=Mage::getModel('catalog/product')->load($id);
$product->setSpecialFromDate('2010-10-28');
// below code use for time format
$product->setSpecialFromDateIsFormated(true);
$product->getResource()->saveAttribute($product, 'special_from_date');
$productIds = array(1,3,2);
$products = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('entity_id', array('in' => $productIds));
foreach($products as $product)
{
$product->setSpecialFromDate('2010-10-28');
// below code use for time format
$product->setSpecialFromDateIsFormated(true);
$product->getResource()->saveAttribute($product, 'special_from_date');
}
Mage::getSingleton('catalog/product_api')->update();
और Mage::getSingleton('catalog/product_action')->updateAttributes()
। product_api ने avg पर 1.7 सेकंड और product_action ने avg पर 1.0 सेकंड का समय लिया। हालांकि, $product->getResource()->saveAttribute()
avg पर avg 0.04 Seconds लिया। धन्यवाद!
$product->getResource()->saveAttribute
कार्रवाई के आसपास लूप करना होगा । धन्यवाद!!
SQL क्वेरी लिखें।
दूसरा सबसे अच्छा तरीका (और जो मैं सुझाता हूं): \Mage_Catalog_Model_Resource_Product_Action::updateAttributes
कोड उदाहरण u_maxx द्वारा:
$allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds();
$attributeCode = 'some_eav_attribute';
$attributeValue = NULL;
$attrData = array( $attributeCode => $attributeValue );
$storeId = 0;
// no reindex:<
Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
// reindex:
Mage::getModel('catalog/product_action')->updateAttributes($allProductIds, $attrData, $storeId);
यह बहुस्तरीय मूल्यों के साथ कैसे काम करेगा? क्या यह मूल्य जोड़ता है या अन्य पूर्व-चयनित मानों को अधिलेखित करता है
बहुविकल्पी आम तौर पर अल्पविराम से अलग पूर्णांक के रूप में सहेजे जाते हैं, जैसे 27,42,4711
। इसलिए यदि आप कहने के लिए मान बदलते हैं 1
, तो अन्य मान खो जाते हैं। लेकिन आप जो कर सकते हैं वह कुछ ऐसा है जैसे CONCAT(value, ',1')
अल्पविराम द्वारा अलग किए गए नए मूल्य को अंत तक जोड़ना। मुझे लगता है कि भले ही आप दो बार एक मूल्य जोड़ते हैं, यह कोई समस्या नहीं है, क्योंकि मैगेंटो अगली बार यह फ़िल्टर करता है कि आइटम सहेजा गया है और दूसरे मूल्य को अनदेखा करता है।
<?php $allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds(); $attributeCode = 'some_eav_attribute'; $attributeValue = NULL; $attrData = array( $attributeCode => $attributeValue ); $storeId = 0; Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
Mage::getSingleton('catalog/resource_product_action')
करने के लिए Mage::getModel('catalog/product_action')
साथ में ठीक उसी मापदंडों ऊपर उल्लेख किया है।
10k उत्पाद, SQL का उपयोग करें। ईएवी सिर्फ पानी को पिघलाता है। प्रति प्रश्न सबसे तेज़ तरीका है।
Attra_id ढूंढें
SELECT * FROM eav_attribute where entity_type_id = 4 and attribute_code = 'YOUR_ATTRIBUTE_CODE_HERE'
attribute_id
उपरोक्त क्वेरी से पाया गया अपडेट ।
UPDATE catalog_product_entity_int SET value = 1 WHERE attribute_id = FOUND_ATTRIBUTE_ID
मुझे लगता है कि आप अद्यतन के साथ एक subselect कर सकते हैं, लेकिन सरलता के लिए दो SQL प्रश्नों को समझना आसान है।
नोट: entity_type_id = 4
सबसे हमेशा उत्पाद EAV प्रविष्टियों है। यदि आपको बड़े पैमाने पर अद्यतन श्रेणी या ग्राहक विशेषताओं की आवश्यकता होती है, तो यह अलग-अलग और साथ ही साथ अद्यतन की गई तालिका के आधार पर भिन्न होगी। इसके अलावा अगर आपके पास मल्टी-स्टोर सेटअप है तो सुनिश्चित करें और नोट और कंडीशन करेंstore_id
ऊपर फैबियन के जवाब के आगे, आप एक बार में कई फ़ील्ड अपडेट कर सकते हैं। नीचे दिए गए उदाहरण में केवल 2 (स्टॉक, स्टॉक की स्थिति) है, लेकिन आप जितना चाहें उतना उपयोग कर सकते हैं।
$product_ids = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToFilter('status', array('eq' => 2)) //only disabled
->getAllIds();
$attrData = [
['attribute_one' => 1],
['attribute_two' => 1]
];
$storeId = 0;
Mage::getSingleton('catalog/resource_product_action')
->updateAttributes($product_ids, $attrData, $storeId);