एक विशिष्ट [कस्टम] उत्पाद मॉडल से उत्पाद विशेषता के लिए मूल्य कैसे बचाएं


12

उत्पाद मॉडल से एक विशिष्ट [कस्टम] उत्पाद विशेषता के लिए मूल्य कैसे बचाएं ?

मुझे यहाँ से नीचे की स्क्रिप्ट मिली है :

$product = Mage::getModel('catalog/product')->load(1); 

$product->setName('Some Random Name'); 

$product->getResource()->saveAttribute($product, 'name');

जवाबों:


32

इसके बारे में जाने के 2 तरीके हैं, एक है Magento catalog/productमॉडल प्राप्त करना और उत्पाद को ID द्वारा लोड करना जो आपको पूरा उत्पाद देगा, फिर नाम सेट करना और इसे सहेजना।

$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');

try {
   $product->save();
} catch(Exception $e) {
  echo "{$e}";
}

जैसा कि ओपी ने कहा, यह सिर्फ एक विशेषता को बदलने के लिए काफी भारी है। मुझे लगा कि विशेषता मास अपडेट टूल को ऐसा करने के लिए एक क्लीनर तरीके का उपयोग करना चाहिए और Mage_Catalog_Model_Resource_Product_Actionकक्षा को ढूंढना चाहिए

$product_id = 1;
$store_id = 0;

$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
    'name' => 'foobar!'
), $store_id);

[अद्यतन] बेंचमार्क

तो एक त्वरित बेंचमार्क स्क्रिप्ट और परिणाम खुद के लिए बोलते हैं।

$starttime = microtime(true);

for ($i=20; $i>0; $i--)
{
    $action = Mage::getModel('catalog/resource_product_action');
    $action->updateAttributes(array(1), array(
        'name' => 'foobar!'
    ), 0);
}

echo "Time: " . (microtime(true) - $starttime) . " seconds\n";

$starttime = microtime(true);

for ($i=20; $i>0; $i--)
{
    $product = Mage::getModel('catalog/product')->load(1);
    $product->setName('foobar!');
    $product->save();
    unset($product);
}

echo "Time: " . (microtime(true) - $starttime) . " seconds\n";

समय: 0.076527833938599 सेकंड

समय: 4.757472038269 सेकंड


उत्तर के लिए धन्यवाद, लेकिन इसके स्क्रिप्ट के ऊपर से अधिक समय लगता है क्योंकि यह मॉडल को लोड करता है। उत्तर के लिए धन्यवाद। लेकिन इसके स्क्रिप्ट से अधिक समय लगता है क्योंकि यह मॉडल को लोड करता है।
रोनी

मैं कोड की एक अद्यतन किया है
Sander Mangel

आपका स्वागत है। मैं वास्तव में 2 आयात लिपियों में पहले से ही लागू है और यह बहुत समय बचाता है।
Sander Mangel

छोटा सवाल: यह वह जवाब नहीं था जिसकी आपको तलाश थी? तो न जाने मुझे, अगर इतने करीब प्रश्न हमारे उत्तर दिया प्रश्न दर :) रखने के लिए कृपया
Sander Mangel

11

यदि आपको केवल एक विशेषता को सहेजने की आवश्यकता है और आपके पास पहले से ही भरा हुआ उत्पाद है तो आप इस विधि का भी उपयोग कर सकते हैं:

$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');

यह विधि की तुलना में बहुत तेज है catalog/resource_product_action


पोस्ट के लिए और अप-टू-डेट रखने के लिए धन्यवाद। लेकिन मुझे एक अजीब व्यवहार दिखाई देता है। इस तरह सेव ने मुझे हमेशा सबसे अच्छा समय दिया। लेकिन हाल ही में 2 Magento उदाहरणों में EE लोगों को भी बचाने के लिए पूरा करने के लिए समय लगता है। क्या यह इन उदाहरणों पर कुछ विस्तार के कारण हो सकता है। मैं कोई और मुद्दा नहीं सोच सकता। ये Magento इंस्टेंस वर्तमान में स्थानीय देव प्रणाली द्वारा हैं और इसे अभी तक एक परीक्षण सर्वर इंस्टेंस में स्थानांतरित करना है।
zapping

@ आपको उसी बेंचमार्क को चलाना चाहिए जिसे सैंडर ने चलाया - एक अच्छी तुलना होगी!
रॉबी एवेरिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.