ฉันพยายามอัปเดตราคาเป็นผลิตภัณฑ์จำนวนมาก (มากกว่า 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 ใช้เวลา 1.7 วินาทีในการเฉลี่ยและ product_action ใช้เวลา 1.0 วินาทีในการเฉลี่ย อย่างไรก็ตาม$product->getResource()->saveAttribute()
ใช้เวลาเฉลี่ย 0.04 วินาทีในการเฉลี่ย ขอบคุณ!
$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);
สิ่งนี้จะทำงานกับค่าการเลือกหลายค่าได้อย่างไร มัน 'เพิ่ม' ค่าหรือเขียนทับค่าที่เลือกไว้ล่วงหน้าอื่น ๆ
Multiselects 27,42,4711
จะถูกบันทึกไว้เป็นปกติจุลภาคคั่นจำนวนเต็มเช่น ดังนั้นหากคุณเปลี่ยนค่าที่จะพูด1
ค่าอื่น ๆ จะหายไป แต่สิ่งที่คุณสามารถทำได้คือสิ่งที่CONCAT(value, ',1')
หมายถึงการเพิ่มค่าใหม่ไปยังจุดสิ้นสุดคั่นด้วยเครื่องหมายจุลภาค ฉันคิดว่าแม้ว่าคุณจะเพิ่มค่าสองครั้ง แต่ก็ไม่มีปัญหาเพราะ Magento จะกรองมันในครั้งต่อไปที่มีการบันทึกรายการและไม่สนใจค่าที่สอง
<?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 EAV แค่โคลนน้ำ ต่อคำถามเป็นวิธีที่เร็วที่สุด
ค้นหา attribute_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
ฉันคิดว่าคุณสามารถเลือกย่อยด้วยการอัปเดต แต่เพื่อความง่ายเพราะการสืบค้น 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);