Question

I try to delete product but it returns exception can not delete product and sku my code is here

 $productcollection = $this->collectionFactory->create()->addAttributeToSelect('manufacturer','LG')->load();

        foreach ($productcollection as $product) {
            try {

                $this->productRepository->delete($product);
            } catch (StateException $e) {
            }
        }

how can I solve this error ?

Was it helpful?

Solution 3

$productcollection = $this->collectionFactory->create()->addAttributeToSelect('manufacturer','LG')->load();
foreach ($productcollection as $product) {
    try {
        $productcollection->removeItemByKey($product->getId());
    } catch (StateException $e) {
    }
}
return $productcollection;
      }

Thankful of my friend Sandro who helped me with the solution.

OTHER TIPS

If you try to delete product from frontend then you need to assign area for that.

Add following code to your class.

public function __construct(
    ........
    \Magento\Catalog\Model\ProductRepository $productRepository,
    \Magento\Framework\Registry $registry
) {
    ......
    $this->productRepository = $productRepository;
    $this->registry = $registry;
}

Following code is for deleting product.

$this->registry->register('isSecureArea', true);
// using sku
$this->productRepository->deleteById('Z62676');

// using product id
$product = $this->productRepository->getById(1);
$this->productRepository->delete($product);

Delete All Products Example using object manager :

$objectManager->get('Magento\Framework\Registry')->register('isSecureArea', true);
$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$collection = $productCollection->create()->addAttributeToSelect('*')->load();
$app_state = $objectManager->get('\Magento\Framework\App\State');
$app_state->setAreaCode('frontend');

foreach ($collection as $product){
    try {
        echo 'Deleted '.$product->getName()."<br>";
        $product->delete();

    } catch (Exception $e) {
        echo 'Unable to delete product '.$product->getName()."<br>";
        echo $e->getMessage() . "<br>";
    }   
} 

Do some corrections in the code. Hopefully, it will work for you.

$productcollection = $this->collectionFactory->create()->addAttributeToSelect('manufacturer','LG')->load();
    foreach ($productcollection as $product) {
        try {
            $product->delete();
        } catch (StateException $e) {
        }
    }

This code will gives you result what you want.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top