обновляйте только связанные продукты программно - magento 2


Я следую этому ответу для обновления связанных продуктов, он работает, но он удалит перекрестную продажу и повышение продаж продуктов родителя. это поведение по умолчанию или я что-то не так сделал?

//For testing load one product

$target=$this->productRepository->getById(501);

//Here I collect related skus list programatically

.........................................
..........................................

$skuLinks = explode(",",$related);
$obj = \Magento\Framework\App\ObjectManager::getInstance();
foreach($skuLinks as $skuLink) {

    $productLink = $obj->create('Magento\Catalog\Api\Data\ProductLinkInterface')
    ->setSku($target->getSku())
    ->setLinkedProductSku($skuLink)
    ->setPosition(1)
    ->setLinkType('related');
    $linkData[] = $productLink;

}

//Set Product Link
$target->setProductLinks($linkData);
$this->productRepository->save($target);

//checking, it only display the related skus, previously it shows related,upsell,crossell
$links=$target->getProductLinks();
foreach($links as $link)
{
    echo $link->getLinkType().' - '.$link->getLinkedProductSku().'<br>';
}         
Author: Community, 2017-02-04

2 answers

Все ссылки будут перезаписаны, если вы вызовете метод ProductInterface::SETLINKS. Вы можете попробовать добавить новые ссылки в уже существующий массив ссылок на продукты.

Пример:

$links = $product->getProductLinks();
$links[] = $newLink;
$product->setProductLinks($links);
$this->productRepository->save($product);
 2
Author: Max, 2017-02-04 15:43:27

Следующий код работает для меня. Код вставляет идентификатор продукта и связанные с ним идентификаторы продуктов непосредственно в базу данных.

 try {
   $q = $objectManager->get('\Magento\Framework\App\ResourceConnection');
   $q->getConnection('core_write')->query("insert into catalog_product_link (linked_product_id, product_id,link_type_id) values (".$newRelatedProdId.",".$newProdId.",1)");

                    }
                    catch(Exception $e)
                    {
                        echo 'Duplicate Key'.PHP_EOL;
                    }

Пожалуйста, обратитесь к приведенным ниже ссылкам для получения более подробной информации. https://www.pearlbells.co.uk/programmatically-assign-related-products-magento-2/

 0
Author: Liz Eipe C, 2018-11-21 01:08:43