cancel
Showing results for 
Search instead for 
Did you mean: 

MassDelete

MassDelete

Hello, I hope you can help me. I have this situation: I want to implement the MassDelete action but it is not working. This is what I have in the code.

 

    public function execute()
    {
        $collection = $this->filter->getCollection($this->collectionFactory->create());
        $collectionSize = $collection->getSize();
        foreach ($collection as $item) {
            $item->delete();
        }
 
        $this->messageManager->addSuccess(__('A total of %1 record(s) have been deleted.', $collectionSize));
 
        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
        $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
        return $resultRedirect->setPath('*/*/');
    }
                    <block class="Magento\Backend\Block\Widget\Grid\Massaction" name="blog_post_massaction" as="grid.massaction">
                        <arguments>
                            <argument name="massaction_id_field" xsi:type="string">post_id</argument>
                            <argument name="form_field_name" xsi:type="string">ids</argument>
                            <argument name="use_select_all" xsi:type="string">1</argument>
                            <argument name="options" xsi:type="array">
                                <item name="disable" xsi:type="array">
                                    <item name="label" xsi:type="string" translate="true">Delete</item>
                                    <item name="url" xsi:type="string">manageblog/operation/massDelete</item>
                                </item>
                            </argument>
                        </arguments>
                    </block>
4 REPLIES 4

Re: MassDelete

@juancamilo1a94 

You can do so by replacing your for each with the following code:

foreach ($collection as $item) {
        $model=$this->registrationFactory->create()->load($item->getId());
        $model->delete();
    }
Problem solved? Click Kudos and "Accept as Solution".
200+ Magento 2 Extensions for Enhanced Shopping Experience.

Re: MassDelete

Take a couple references from the core, e.g.:

\Magento\Customer\Controller\Adminhtml\Index\MassDelete::massAction():
protected function massAction(AbstractCollection $collection)
{
$customersDeleted = 0;
foreach ($collection->getAllIds() as $customerId) {
$this->customerRepository->deleteById($customerId);
$customersDeleted++;
}
//snip...
}
If issue solved, Click Kudos & Accept as Solution.
LitCommerce - The Most Simple & Affordable Multi-channel Selling Tool

Re: MassDelete

Hello @juancamilo1a94 

 

you can use the below code to execute:

 

 $collection = $this->filter->getCollection($this->collectionFactory->create());
 if (isset($collection) && $collection->getSize() > 0) {
                $collection->walk('delete');
}

Re: MassDelete

Please follow the below code for massaction delete

$collection = $this->filter->getCollection($this->collectionFactory->create());
            $count = 0;
            foreach ($collection as $model) {
                $model->delete();
                $count++;
            }

Thanks.