Tôi cần thực hiện cập nhật lớn dữ liệu sản phẩm nhưng những gì tôi cần làm không thể đạt được khi nhập sản phẩm. Ví dụ, tôi cần cập nhật thư viện phương tiện và danh mục cho các sản phẩm nhất định, nhưng giải pháp tôi đưa ra mất quá nhiều thời gian.
Một tóm tắt nhỏ: Tôi đã thêm một lệnh vào Magento 2 CLI, với tệp cấu hình json, xóa, thêm, cập nhật hoặc sắp xếp các mục trong thư viện phương tiện cho một sản phẩm nhất định như thế này. Ở đây tôi dán một đoạn trích của mã:
/* $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();
Vì đây là một bản cập nhật lớn, dòng "$ sản phẩm-> save ()" được gọi nhiều lần và luôn mất từ 2 đến 4 giây. Vì tôi cần khởi chạy mã cho hàng ngàn sản phẩm, tôi cần một cách nhanh hơn để làm điều đó.
Tôi đã thử với
$product->getResource()->saveAttribute($product, 'media_gallery');
và
$product->addAttributeUpdate('media_gallery', $mediaGallery, $storeId);
nhưng điều đó không làm việc cho thư viện phương tiện (tôi chỉ làm việc cho eav).
Có cách nào để chỉ lưu thư viện phương tiện và duy trì những thay đổi này nhanh hơn không?
(Những gì tôi tìm kiếm là một cái gì đó giống như Magento\Catalog\Api\CategoryLinkManagementInterface::assignProductToCategories
phương pháp lưu liên kết danh mục / sản phẩm nhanh hơn so với lưu toàn bộ sản phẩm)