Saya perlu melakukan pembaruan besar-besaran terhadap data produk tetapi apa yang harus saya lakukan tidak dapat dicapai dengan impor produk. Sebagai contoh, saya perlu memperbarui galeri media dan kategori untuk produk yang diberikan, tetapi solusi yang saya buat terlalu lama.
Rekap kecil: Saya menambahkan perintah ke Magento 2 CLI yang, diberikan file konfigurasi json, menghapus, menambah, memperbarui atau mengurutkan entri galeri media untuk produk yang diberikan seperti ini. Di sini saya menempelkan kutipan kode:
/* $product is of type Magento\Catalog\Model\Product */
//get existing media gallery
$existingMediaGallery = $product->getMediaGallery();
/*
do stuff with media gallery (alter $existingMediaGallery)
(add, remove, sort, ...)
*/
//set media gallery again
$product->setMediaGallery($existingMediaGallery);
//process media gallery
$mediaGalleryEntries = $product->getMediaGalleryEntries();
$this->getMediaGalleryProcessor()->clearMediaAttribute($product, array_keys($product->getMediaAttributes()));
if ($mediaGalleryEntries) {
foreach ($mediaGalleryEntries as $k => $entry) {
if (!isset($entry['removed']) && !empty($entry['types'])) {
$this->getMediaGalleryProcessor()->setMediaAttribute($product, $entry['types'], $entry['file']);
}
}
}
//save product
$product->save();
Karena ini merupakan pembaruan besar-besaran, baris "$ product-> save ()" dipanggil berkali-kali dan selalu memakan waktu 2 hingga 4 detik. Karena saya perlu meluncurkan kode untuk ribuan produk, saya perlu cara yang lebih cepat untuk melakukannya.
Saya mencoba
$product->getResource()->saveAttribute($product, 'media_gallery');
dan
$product->addAttributeUpdate('media_gallery', $mediaGallery, $storeId);
tapi itu tidak berfungsi untuk galeri media (saya pikir hanya berfungsi untuk eav).
Apakah ada cara untuk menyimpan hanya galeri media dan mempertahankan perubahan ini lebih cepat?
(Apa yang saya cari adalah sesuatu seperti Magento\Catalog\Api\CategoryLinkManagementInterface::assignProductToCategories
metode yang menyimpan asosiasi kategori / produk lebih cepat daripada menyimpan produk lengkap)