我需要对产品数据进行大量更新,但是产品导入无法实现我需要做的事情。例如,我需要更新给定产品的媒体库和类别,但是我提出的解决方案花费的时间太长。
简要回顾一下:我在Magento 2 CLI中添加了一个命令,给定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
方法,该方法比完全保存产品更快地保存类别/产品关联)