質問

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 ?

役に立ちましたか?

解決 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.

他のヒント

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.

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top