diff -Nuar a/vendor/magento/module-sales/Model/Order/ItemRepository.php b/vendor/magento/module-sales/Model/Order/ItemRepository.php index 6e029ac4683..345fffc414f 100644 --- a/vendor/magento/module-sales/Model/Order/ItemRepository.php +++ b/vendor/magento/module-sales/Model/Order/ItemRepository.php @@ -167,10 +167,7 @@ class ItemRepository implements OrderItemRepositoryInterface public function save(OrderItemInterface $entity) { if ($entity->getProductOption()) { - $request = $this->getBuyRequest($entity); - $productOptions = $entity->getProductOptions(); - $productOptions['info_buyRequest'] = $request->toArray(); - $entity->setProductOptions($productOptions); + $entity->setProductOptions($this->getItemProductOptions($entity)); } $this->metadata->getMapper()->save($entity); @@ -178,6 +175,23 @@ class ItemRepository implements OrderItemRepositoryInterface return $this->registry[$entity->getEntityId()]; } + /** + * Return product options + * + * @param OrderItemInterface $entity + * @return array + */ + private function getItemProductOptions(OrderItemInterface $entity): array + { + $request = $this->getBuyRequest($entity); + $productOptions = $entity->getProductOptions(); + $productOptions['info_buyRequest'] = $productOptions && !empty($productOptions['info_buyRequest']) + ? array_merge($productOptions['info_buyRequest'], $request->toArray()) + : $request->toArray(); + + return $productOptions; + } + /** * Set parent item. *