diff -Nuar a/vendor/magento/module-catalog-import-export/Model/Import/Product/Option.php b/vendor/magento/module-catalog-import-export/Model/Import/Product/Option.php index 7435c0bebfc..ddd8bf790b3 100644 --- a/vendor/magento/module-catalog-import-export/Model/Import/Product/Option.php +++ b/vendor/magento/module-catalog-import-export/Model/Import/Product/Option.php @@ -414,7 +414,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity $this->_initMessageTemplates(); - $this->_initProductsSku()->_initOldCustomOptions(); + $this->_initProductsSku(); } /** @@ -599,6 +599,9 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity 'option_title.store_id = ?', $storeId ); + if (!empty($this->_newOptionsOldData)) { + $this->_optionCollection->addProductToFilter(array_keys($this->_newOptionsOldData)); + } $this->_byPagesIterator->iterate($this->_optionCollection, $this->_pageSize, [$addCustomOptions]); } @@ -608,6 +611,20 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity } /** + * Get existing custom options data + * + * @return array + */ + private function getOldCustomOptions(): array + { + if ($this->_oldCustomOptions === null) { + $this->_initOldCustomOptions(); + } + + return $this->_oldCustomOptions; + } + + /** * Imported entity type code getter * * @return string @@ -703,9 +720,9 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity $errorRows = []; foreach ($this->_newOptionsOldData as $productId => $options) { foreach ($options as $outerData) { - if (isset($this->_oldCustomOptions[$productId])) { + if (isset($this->getOldCustomOptions()[$productId])) { $optionsCount = 0; - foreach ($this->_oldCustomOptions[$productId] as $innerData) { + foreach ($this->getOldCustomOptions()[$productId] as $innerData) { if (count($outerData['titles']) == count($innerData['titles'])) { $outerTitles = $outerData['titles']; $innerTitles = $innerData['titles']; @@ -736,8 +753,8 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity $errorRows = []; foreach ($this->_newOptionsOldData as $productId => $options) { foreach ($options as $outerData) { - if (isset($this->_oldCustomOptions[$productId])) { - foreach ($this->_oldCustomOptions[$productId] as $innerData) { + if (isset($this->getOldCustomOptions()[$productId])) { + foreach ($this->getOldCustomOptions()[$productId] as $innerData) { if (count($outerData['titles']) == count($innerData['titles'])) { $outerTitles = $outerData['titles']; $innerTitles = $innerData['titles']; @@ -765,9 +782,9 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity protected function _findExistingOptionId(array $newOptionData, array $newOptionTitles) { $productId = $newOptionData['product_id']; - if (isset($this->_oldCustomOptions[$productId])) { + if (isset($this->getOldCustomOptions()[$productId])) { ksort($newOptionTitles); - $existingOptions = $this->_oldCustomOptions[$productId]; + $existingOptions = $this->getOldCustomOptions()[$productId]; foreach ($existingOptions as $optionId => $optionData) { if ($optionData['type'] == $newOptionData['type'] && $optionData['titles'][Store::DEFAULT_STORE_ID] == $newOptionTitles[Store::DEFAULT_STORE_ID]