Necesito hacer una actualización masiva de los datos del producto, pero lo que necesito hacer no se puede lograr con la importación del producto. Por ejemplo, necesito actualizar la galería de medios y las categorías para productos dados, pero la solución que obtuve lleva demasiado tiempo.
Una pequeña recapitulación: agregué un comando a la CLI de Magento 2 que, dado un archivo de configuración json, elimina, agrega, actualiza u ordena las entradas de la galería multimedia para un producto como este. Aquí pego un extracto del código:
/* $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();
Como se trata de una actualización masiva, la línea "$ product-> save ()" se llama muchas veces y siempre lleva de 2 a 4 segundos. Como necesito lanzar el código para miles de productos, necesito una forma más rápida de hacerlo.
Lo intenté con
$product->getResource()->saveAttribute($product, 'media_gallery');
y
$product->addAttributeUpdate('media_gallery', $mediaGallery, $storeId);
pero eso no funciona para la galería de medios (solo funciona para cada creo).
¿Hay alguna manera de guardar solo la galería de medios y persistir estos cambios más rápido?
(Lo que busco es algo así como un Magento\Catalog\Api\CategoryLinkManagementInterface::assignProductToCategories
método que guarda la asociación de categoría / producto más rápido que un producto completo guardado)