cancel
Showing results for 
Search instead for 
Did you mean: 

Programmatically deleting an order and associated data

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Programmatically deleting an order and associated data

I recently had to clean out orders via sql which seems to be a pretty substantial query for enterprise.  Not really a big deal, but the client I'm working with is wondering about adding a delete option for pending orders that would remove just that order.

 

Are there details on how to programmatically remove a single order and associated data for Magento 2.2 EE available?

7 REPLIES 7

Re: Programmatically deleting an order and associated data

Hello @joseph_digiovanna,

 

You can use the following code to delete the order in the external file and put it magento root directory 

<?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    require 'app/bootstrap.php';

    $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
    $app = $bootstrap->createApplication('Magento\Framework\App\Http');
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $objectManager->get('Magento\Framework\App\State')->setAreaCode('frontend'); // adminhtml
	$registry = $objectManager->get('Magento\Framework\Registry');

	$id = 10; // your order_id 
	$order = $objectManager->create('Magento\Sales\Model\Order')->load($id);

	// $incrementId = 'xxxxxxxxx';
	// $order = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($incrementId);

	$registry->register('isSecureArea','true');
	$order->delete();
	$registry->unregister('isSecureArea'); 

--
If my answer is useful, please give Kudos or Accept as Solution

Re: Programmatically deleting an order and associated data

Hello joseph_digiovanna

 

Please find below free order delete extension link for delete single order.

Url : https://www.mageplaza.com/magento-2-delete-orders/

Url : https://www.wyomind.com/magento2/order-eraser-magento.html

 

Truncate order tables by query

 

SET FOREIGN_KEY_CHECKS=0;

# Clean order history
TRUNCATE TABLE `sales_bestsellers_aggregated_daily`;
TRUNCATE TABLE `sales_bestsellers_aggregated_monthly`;
TRUNCATE TABLE `sales_bestsellers_aggregated_yearly`;

# Clean order infos
TRUNCATE TABLE `sales_creditmemo`;
TRUNCATE TABLE `sales_creditmemo_comment`;
TRUNCATE TABLE `sales_creditmemo_grid`;
TRUNCATE TABLE `sales_creditmemo_item`;
TRUNCATE TABLE `sales_invoice`;
TRUNCATE TABLE `sales_invoiced_aggregated`;
TRUNCATE TABLE `sales_invoiced_aggregated_order`;
TRUNCATE TABLE `sales_invoice_comment`;
TRUNCATE TABLE `sales_invoice_grid`;
TRUNCATE TABLE `sales_invoice_item`;
TRUNCATE TABLE `sales_order`;
TRUNCATE TABLE `sales_order_address`;
TRUNCATE TABLE `sales_order_aggregated_created`;
TRUNCATE TABLE `sales_order_aggregated_updated`;
TRUNCATE TABLE `sales_order_grid`;
TRUNCATE TABLE `sales_order_item`;
TRUNCATE TABLE `sales_order_payment`;
TRUNCATE TABLE `sales_order_status_history`;
TRUNCATE TABLE `sales_order_tax`;
TRUNCATE TABLE `sales_order_tax_item`;
TRUNCATE TABLE `sales_payment_transaction`;
TRUNCATE TABLE `sales_refunded_aggregated`;
TRUNCATE TABLE `sales_refunded_aggregated_order`;
TRUNCATE TABLE `sales_shipment`;
TRUNCATE TABLE `sales_shipment_comment`;
TRUNCATE TABLE `sales_shipment_grid`;
TRUNCATE TABLE `sales_shipment_item`;
TRUNCATE TABLE `sales_shipment_track`;
TRUNCATE TABLE `sales_shipping_aggregated`;
TRUNCATE TABLE `sales_shipping_aggregated_order`;

# Clean cart infos
TRUNCATE TABLE `quote`;
TRUNCATE TABLE `quote_address`;
TRUNCATE TABLE `quote_address_item`;
TRUNCATE TABLE `quote_id_mask`;
TRUNCATE TABLE `quote_item`;
TRUNCATE TABLE `quote_item_option`;
TRUNCATE TABLE `quote_payment`;
TRUNCATE TABLE `quote_shipping_rate`;

# Reset indexes (if you want your orders number start back to 1
TRUNCATE TABLE sequence_invoice_1;
TRUNCATE TABLE sequence_order_1;
TRUNCATE TABLE sequence_shipment_1;
TRUNCATE TABLE sequence_creditmemo_1;


SET FOREIGN_KEY_CHECKS=1;

Hope it will help to solve the problem then please accept as solution and kudos.

Re: Programmatically deleting an order and associated data

Hi,

it deletes only the order history, how to remove creditmemo,shipments,invoices..etc

 

Re: Programmatically deleting an order and associated data

Hello @nikhil_velaga ,

 

You can clear creditmemo, shipment and invoice history by using above SQL query https://community.magento.com/t5/Magento-2-x-Programming/Programmatically-deleting-an-order-and-asso...

 


--
If my answer is useful, please Accept as Solution & give Kudos

 

Re: Programmatically deleting an order and associated data

Make sure to remove all invoices,shipments,creditmemos of the order first. Then you can delete the order. 

$incrementId = 10000342;
$order       = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($incrementId);
//or
//$order = $objectManager->create('\Magento\Sales\Model\Order')->load($orderId);

$invoices    = $order->getInvoiceCollection();
foreach ($invoices as $invoice) {
    $invoice->delete();
}
$shipments = $order->getShipmentsCollection();
foreach ($shipments as $shipment) {
    $shipment->delete();
}
$creditmemos = $order->getCreditmemosCollection();
foreach ($creditmemos as $creditmemo) {
    $creditmemo->delete();
}
// delete invoices/shipments/creditmemos & then finally delete order
$order->delete();

Re: Programmatically deleting an order and associated data

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$id = 10;// your order_id
$order = $objectManager->create('Magento\Sales\Model\Order')->load($id);
// $incrementId = 'xxxxxxxxx'; //
$order = $objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($incrementId); $order->delete();

Re: Programmatically deleting an order and associated data

Hi, Please use the below code to clean up the order.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $incrementId = "2000000008";
        $orderInterface = $objectManager->create('Magento\Sales\Api\Data\OrderInterface');
        $order = $orderInterface->loadByIncrementId($incrementId);

        $orderId = $order->getId();

        if($orderId) {
            $invoices = $order->getInvoiceCollection();
            if(count($invoices->getData())) {
                foreach ($invoices as $invoice){
                    $items = $invoice->getAllItems();
                    foreach ($items as $item) {
                        $item->delete();
                    }
                    $invoice->delete();
                }
            }

            $creditnotes = $order->getCreditmemosCollection();
            if(count($creditnotes->getData())) {
                foreach ($creditnotes as $creditnote){
                    $items = $creditnote->getAllItems();
                    foreach ($items as $item) {
                        $item->delete();
                    }
                    $creditnote->delete();
                }
            }

            $shipments = $order->getShipmentsCollection();
            if(count($shipments->getData())) {
                foreach ($shipments as $shipment){
                    $items = $shipment->getAllItems();
                    foreach ($items as $item) {
                        $item->delete();
                    }
                    $shipment->delete();
                }
            }
            $order->delete();
        }