Saya mencoba memperbarui harga ke banyak produk (lebih dari 10.000). Cara saya melakukan itu sekarang sangat menyita waktu. Mana cara terbaik untuk mengulang semua produk dan memperbarui sebagian besar dari mereka?
Terima kasih
Saya mencoba memperbarui harga ke banyak produk (lebih dari 10.000). Cara saya melakukan itu sekarang sangat menyita waktu. Mana cara terbaik untuk mengulang semua produk dan memperbarui sebagian besar dari mereka?
Terima kasih
Jawaban:
Hai Magento memberikan atribut dengan kode di bawah ini
$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();
dan Mage::getSingleton('catalog/product_action')->updateAttributes()
. product_api mengambil rata-rata 1,7 detik dan product_action mengambil rata-rata 1,0 detik. Namun, $product->getResource()->saveAttribute()
gunakan rata-rata 0,04 detik pada rata-rata. Terima kasih!
$product->getResource()->saveAttribute
tindakan. TERIMA KASIH!!
Tulis SQL Query.
Cara terbaik kedua (dan yang saya sarankan): \Mage_Catalog_Model_Resource_Product_Action::updateAttributes
Contoh kode oleh 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);
Bagaimana ini akan bekerja dengan nilai-nilai pilihan ganda? Apakah itu 'menambah' nilai atau menimpa nilai yang sudah dipilih sebelumnya
Multiselek biasanya disimpan sebagai bilangan bulat yang dipisah koma, seperti 27,42,4711
. Karena itu jika Anda mengubah nilai untuk mengatakan 1
, nilai-nilai lainnya hilang. Tapi yang bisa Anda lakukan adalah sesuatu seperti CONCAT(value, ',1')
menambahkan nilai baru ke akhir, dipisahkan dengan koma. Saya pikir bahkan jika Anda menambahkan nilai dua kali, ini tidak masalah, karena Magento memfilternya saat item disimpan dan mengabaikan nilai kedua.
<?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')
ke Mage::getModel('catalog/product_action')
dengan parameter yang sama persis yang disebutkan di atas.
10k produk, gunakan SQL. EAV hanya merusak air. Per pertanyaan adalah cara tercepat.
Temukan atribut_id
SELECT * FROM eav_attribute where entity_type_id = 4 and attribute_code = 'YOUR_ATTRIBUTE_CODE_HERE'
Pembaruan dengan ditemukan attribute_id
dari permintaan di atas.
UPDATE catalog_product_entity_int SET value = 1 WHERE attribute_id = FOUND_ATTRIBUTE_ID
Saya kira Anda bisa melakukan subselect dengan pembaruan tetapi untuk kesederhanaan demi dua pertanyaan SQL paling mudah untuk dipahami.
CATATAN: entity_type_id = 4
paling sering entri EAV produk. Jika Anda perlu untuk memperbarui kategori massal atau atribut pelanggan, ini akan berbeda serta tabel yang diperbarui berdasarkan pada jenis atribut apa yang Anda perbarui. Juga jika Anda memiliki pengaturan multi-toko pastikan dan perhatikan dan kondisistore_id
Selanjutnya untuk jawaban Fabian di atas, Anda dapat memperbarui beberapa bidang sekaligus. Contoh di bawah ini hanya memiliki 2 (dalam stok, status stok), tetapi Anda dapat menggunakan sebanyak yang Anda inginkan.
$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);