58 $metadata = $this->getMetadataPool()->getMetadata(ProductInterface::class);
61 $duplicate = $this->productFactory->create();
65 $duplicate->setOptions([]);
66 $duplicate->setIsDuplicate(
true);
67 $duplicate->setOriginalLinkId(
$product->getData($metadata->getLinkField()));
69 $duplicate->setCreatedAt(
null);
70 $duplicate->setUpdatedAt(
null);
71 $duplicate->setId(
null);
72 $duplicate->setStoreId(\
Magento\
Store\Model\Store::DEFAULT_STORE_ID);
74 $this->copyConstructor->build(
$product, $duplicate);
75 $isDuplicateSaved =
false;
77 $urlKey = $duplicate->getUrlKey();
78 $urlKey = preg_match(
'/(.*)-(\d+)$/', $urlKey, $matches)
79 ? $matches[1] .
'-' . ($matches[2] + 1)
81 $duplicate->setUrlKey($urlKey);
84 $isDuplicateSaved =
true;
85 }
catch (\
Magento\Framework\Exception\AlreadyExistsException $e) {
87 }
while (!$isDuplicateSaved);
88 $this->getOptionRepository()->duplicate(
$product, $duplicate);
90 $product->getData($metadata->getLinkField()),
91 $duplicate->getData($metadata->getLinkField())
100 private function getOptionRepository()
102 if (
null === $this->optionRepository) {
104 ->get(\
Magento\Catalog\Model\Product\Option\Repository::class);
113 private function getMetadataPool()
115 if (
null === $this->metadataPool) {
117 ->get(\
Magento\Framework\EntityManager\MetadataPool::class);
const EXTENSION_ATTRIBUTES_KEY
__construct(CopyConstructorInterface $copyConstructor, \Magento\Catalog\Model\ProductFactory $productFactory)