55 */
66namespace Magento \ProductLinksSampleData \Model ;
77
8+ use Magento \Catalog \Api \Data \ProductLinkInterfaceFactory ;
9+ use Magento \Catalog \Api \ProductLinkRepositoryInterface ;
10+ use Magento \Catalog \Model \ProductFactory ;
811use Magento \Framework \Setup \SampleData \Context as SampleDataContext ;
912
1013/**
@@ -23,29 +26,37 @@ class ProductLink
2326 protected $ csvReader ;
2427
2528 /**
26- * @var \Magento\Catalog\Model\ ProductFactory
29+ * @var ProductFactory
2730 */
2831 protected $ productFactory ;
2932
3033 /**
31- * @var \Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks
34+ * @var ProductLinkInterfaceFactory
3235 */
33- protected $ linksInitializer ;
36+ private $ productLinkFactory ;
37+
38+ /**
39+ * @var ProductLinkRepositoryInterface
40+ */
41+ private $ productLinkRepository ;
3442
3543 /**
3644 * @param SampleDataContext $sampleDataContext
37- * @param \Magento\Catalog\Model\ProductFactory $productFactory
38- * @param \Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks $linksInitializer
45+ * @param ProductFactory $productFactory
46+ * @param ProductLinkInterfaceFactory $productLinkFactory
47+ * @param ProductLinkRepositoryInterface $productLinkRepository
3948 */
4049 public function __construct (
4150 SampleDataContext $ sampleDataContext ,
42- \Magento \Catalog \Model \ProductFactory $ productFactory ,
43- \Magento \Catalog \Model \Product \Initialization \Helper \ProductLinks $ linksInitializer
51+ ProductFactory $ productFactory ,
52+ ProductLinkInterfaceFactory $ productLinkFactory ,
53+ ProductLinkRepositoryInterface $ productLinkRepository
4454 ) {
4555 $ this ->fixtureManager = $ sampleDataContext ->getFixtureManager ();
4656 $ this ->csvReader = $ sampleDataContext ->getCsvReader ();
4757 $ this ->productFactory = $ productFactory ;
48- $ this ->linksInitializer = $ linksInitializer ;
58+ $ this ->productLinkFactory = $ productLinkFactory ;
59+ $ this ->productLinkRepository = $ productLinkRepository ;
4960 }
5061
5162 /**
@@ -74,22 +85,33 @@ public function install(array $related, array $upsell, array $crosssell)
7485 foreach ($ row as $ key => $ value ) {
7586 $ data [$ header [$ key ]] = $ value ;
7687 }
77- $ row = $ data ;
78- /** @var \Magento\Catalog\Model\Product $product */
88+
7989 $ product = $ this ->productFactory ->create ();
80- $ productId = $ product ->getIdBySku ($ row ['sku ' ]);
90+ $ productId = $ product ->getIdBySku ($ data ['sku ' ]);
8191 if (!$ productId ) {
8292 continue ;
8393 }
8494 $ product ->setId ($ productId );
85- $ links = [$ linkType => []];
86- foreach (explode ("\n" , $ row ['linked_sku ' ]) as $ linkedProductSku ) {
95+ $ product ->setSku ($ data ['sku ' ]);
96+ $ links = $ this ->productLinkRepository ->getList ($ product );
97+ $ linkedSkusByType = array_fill_keys (array_keys ($ linkTypes ), []);
98+ foreach ($ links as $ link ) {
99+ $ linkedSkusByType [$ link ->getLinkType ()][] = $ link ->getLinkedProductSku ();
100+ }
101+
102+ foreach (explode ("\n" , $ data ['linked_sku ' ]) as $ linkedProductSku ) {
87103 $ linkedProductId = $ product ->getIdBySku ($ linkedProductSku );
88- if ($ linkedProductId ) {
89- $ links [ $ linkType ][ $ linkedProductId ] = [] ;
104+ if (! $ linkedProductId || in_array ( $ linkedProductSku , $ linkedSkusByType [ $ linkType ]) ) {
105+ continue ;
90106 }
107+
108+ $ productLink = $ this ->productLinkFactory ->create ();
109+ $ productLink ->setSku ($ data ['sku ' ])
110+ ->setLinkedProductSku ($ linkedProductSku )
111+ ->setLinkType ($ linkType );
112+ $ links [] = $ productLink ;
91113 }
92- $ this -> linksInitializer -> initializeLinks ( $ product , $ links );
114+ $ product -> setProductLinks ( $ links );
93115 $ product ->getLinkInstance ()->saveProductRelations ($ product );
94116 }
95117 }
0 commit comments