Мне нужно сделать огромное обновление данных о продукте, но то, что мне нужно сделать, не может быть достигнуто с помощью импорта продукта. Например, мне нужно обновить медиа-галерею и категории для определенных продуктов, но решение, которое я предложил, занимает слишком много времени.
Небольшое резюме: я добавил команду в CLI Magento 2, которая, учитывая файл конфигурации json, удаляет, добавляет, обновляет или сортирует записи галереи мультимедиа для данного продукта, как этот. Здесь я вставляю выдержку из кода:
/* $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();
Поскольку это масштабное обновление, строка «$ product-> save ()» вызывается много раз и всегда занимает от 2 до 4 секунд. Поскольку мне нужно запустить код для тысяч продуктов, мне нужен более быстрый способ сделать это.
Я пробовал с
$product->getResource()->saveAttribute($product, 'media_gallery');
а также
$product->addAttributeUpdate('media_gallery', $mediaGallery, $storeId);
но это не работает для медиа-галереи (я думаю, это работает только для eav).
Есть ли способ сохранить только медиа галерею и сохранить эти изменения быстрее?
(То, что я ищу, это что-то вроде Magento\Catalog\Api\CategoryLinkManagementInterface::assignProductToCategories
метода, который быстрее сохраняет связь категории / продукта, чем полное сохранение продукта)