সমস্ত পণ্যগুলিতে একটি বৈশিষ্ট্য আপডেট করার দ্রুততম উপায়


14

আমি দাম অনেকগুলি পণ্যের কাছে আপডেট করার চেষ্টা করছি (10.000 এর বেশি)। আমি এখনই যেভাবে এটি করছি তা অত্যন্ত সময়সাপেক্ষ। সমস্ত পণ্য লুপ করা এবং সেগুলির বেশিরভাগ আপডেট করার সর্বোত্তম উপায় কোনটি?

ধন্যবাদ


উত্তর:


22

হাই ম্যাজেন্টো নীচের কোড দ্বারা একটি বৈশিষ্ট্য সরবরাহ করুন

$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 গড়ে গড়ে ১. seconds সেকেন্ড সময় নিয়েছিল এবং পণ্য_অ্যাকশন গড়ে গড়ে ১.০ সেকেন্ড সময় নেয়। তবে, $product->getResource()->saveAttribute()গড় গড়ে 0.04 সেকেন্ড নিয়েছে। ধন্যবাদ!
জোশুয়া প্যাক

এই পদ্ধতির মতো কি এমন কিছু আছে যা নির্দিষ্ট স্টোর স্তরে বৈশিষ্ট্যগুলি আপডেট করতে পারে?
রবি অ্যাভারিল

Thx @Amit Bera - 1 টি প্রশ্ন বাকি;) 1 টিতে একাধিক বৈশিষ্ট্য সংরক্ষণ করারও কি উপায় আছে? এর একটিকে প্রায় লুপ করতে হবে $product->getResource()->saveAttribute। ধন্যবাদ!!
snh_nl


@amit: আমি প্রয়োজন আমি কিভাবে পরিবর্তন ওয়েবসাইট (বহু-দোকান আপডেট অনুষঙ্গ) বাল্ক পারেন
zus

18

একটি এসকিউএল ক্যোয়ারী লিখুন।

দ্বিতীয় সেরা উপায় (এবং আমি প্রস্তাবিত এক): \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($allPro‌​ductIds, $attrData, $storeId);
// reindex:
Mage::getModel('catalog/product_action')->updateAttributes($allPro‌​ductIds, $attrData, $storeId);

এটি বহুবিধ মান সহ কীভাবে কাজ করবে? এটি কি 'যুক্ত' করে বা অন্যান্য প্রাক-নির্বাচিত মানগুলিকে ওভাররাইট করে

বহুগুণগুলি সাধারণত কমা বিচ্ছিন্ন পূর্ণসংখ্যার মতো সংরক্ষণ করা হয় 27,42,4711। সুতরাং আপনি যদি মানটি বলার বদল করেন 1তবে অন্যান্য মানগুলি হারিয়ে যায়। তবে আপনি যা করতে পারেন তা হ'ল CONCAT(value, ',1')মানে কমা দ্বারা বিচ্ছিন্ন হয়ে নতুন মান যুক্ত করা। আমি মনে করি আপনি দু'বার মান যোগ করলেও, এটি কোনও সমস্যা নয়, কারণ পরের বার আইটেমটি সংরক্ষণ করা হয় এবং দ্বিতীয় মানটিকে উপেক্ষা করে ম্যাজেন্টো এটিকে ফিল্টার করে।


এটি একবারে কেবল 1 কে সারি আপডেট করবে, তত তাড়াতাড়ি নয়: github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/…
B00MER

আমি কোডটি সঠিকভাবে বুঝতে পারলে এটি প্রতি 1000 টি সারি লিখতে থাকে তবে এটি একের পর এক আপডেট হয়।
ফ্যাবিয়ান ব্লাচস্মিড্ট

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);
ম্যাক্স Uroda

1
এই পদ্ধতির সাথে সমস্যা হ'ল এটি পণ্যগুলিকে পুনরায় সূচি দেয় না, সুতরাং আপনি সামনের অংশে পরিবর্তনগুলি দেখতে না পেয়ে কেবল এডমিন প্যানেলে দেখতে পাবেন না। এছাড়াও আপডেটের পরে আপনি পরিবর্তন করতে পারেন reindex করার Mage::getSingleton('catalog/resource_product_action')জন্য Mage::getModel('catalog/product_action')সঙ্গে সঠিক একই পরামিতি উপরে উল্লেখ করেছে।
শ্যাম্পু

1
@snh_nl উত্তর আপডেট করেছে। আশা করি এটি আপনার প্রশ্নের জবাব দেয়
ফ্যাবিয়ান ব্লাচস্মিড্ট

5

10 কে পণ্য, এসকিউএল ব্যবহার করুন। EAV কেবল জলাশয়কে জঞ্জাল করে। প্রতি প্রশ্ন দ্রুততম উপায়।

বৈশিষ্ট্য_আইডি সন্ধান করুন

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

আমি মনে করি আপনি আপডেট সহ একটি সাবলেট করতে পারেন তবে সরলতার জন্য দুটি এসকিউএল ক্যোয়ারী উপলব্ধি করা সবচেয়ে সহজ।

দ্রষ্টব্য: entity_type_id = 4 সর্বদা পণ্য EAV এন্ট্রি হয়। আপনার যদি ভরসাধারণের বিভাগের প্রয়োজন হয় বা গ্রাহকের বৈশিষ্ট্যগুলি এটির সাথে আলাদা আলাদা হবে তেমনি এটি কী ধরণের বৈশিষ্ট্যের উপর নির্ভর করে আপডেট করা হবে তা আপনার আপডেটিং the এছাড়াও আপনার যদি মাল্টি-স্টোর সেটআপ থাকে তবে নিশ্চিত হন এবং নোট এবং শর্ত দিন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);

সুতরাং আপনি যদি সমস্ত পণ্যকে একই বৈশিষ্ট্যের মানটি আপডেট করতে চান তবে আপনি কীভাবে এটির জন্য 3 টি পণ্য, একই বৈশিষ্ট্য, তবে বৈশিষ্ট্যের বিভিন্ন মান সহ আপডেট করতে পারবেন? thx
snh_nl

অমিত বেরার উপরের উত্তরটি দেখুন: magento.stackexchange.com/a/43924/3433
সিলাস পামার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.