Delete orders in Magento using a shell script
Since this is a typical issue when changing from improvement to organizing lastly to creation ennvironments it is convenient to have a shell script that deals with erasing orders in Magento by essentially indicating a rundown of requests to erase, either by request id or request increment id.
In a late post I’ve demonstrated the strides required to erase orders in Magento utilizing several SQL inquiries. Since this is a typical issue when changing from improvement to organizing lastly to creation ennvironments it is convenient to have a shell script that deals with erasing orders in Magento by essentially indicating a rundown of requests to erase, either by request id or request increase id.
This is why I’ve decided to write up a simply PHP shell script containing the required commands to delete orders in Magento. Although it’s pretty self-explanatory I’m planning to release an extension on Magento Connect. Meanwhile feel free to use the code provided below.
<?php require '../app/Mage.php'; Mage::app('admin')->setUseSessionInUrl(false); /** * whether $removeOrderIds are specified as order increment ids (e.g. 100000025) * or order ids (e.g. 25). */ $useOrderIncrementId = true; /** * specify order ids to remove */ $removeOrderIds = array( ); /** * Deletes order either by $orderIncrementId or $orderId. * @param int $orderId * @param boolean $isOrderIncrementId is order increment id * @return boolean */ function deleteOrder($orderId, $isOrderIncrementId = false) { try { $order = null; // load order either based on order increment id or order id if ($isOrderIncrementId) { $order = Mage::getModel('sales/order')->load($orderId, 'increment_id'); } else { $order = Mage::getModel('sales/order')->load($orderId); } if (!$order->getId()) { echo 'Order #' . $orderId . ' does not exist (anymore)' . PHP_EOL; return; } // 1. call delete to trigger delete-CASCADE $order->delete(); // 2. manual clean-up for deleted order // credits go to DeleteOrders extensions $resource = Mage::getSingleton('core/resource'); $delete = $resource->getConnection('core_read'); $orderTable = $resource->getTableName('sales_flat_order_grid'); $invoiceTable = $resource->getTableName('sales_flat_invoice_grid'); $shipmentTable = $resource->getTableName('sales_flat_shipment_grid'); $creditMemoTable = $resource->getTableName('sales_flat_creditmemo_grid'); $sql = "DELETE FROM " . $orderTable . " WHERE entity_id = " . $orderId . ";"; $delete->query($sql); $sql = "DELETE FROM " . $invoiceTable . " WHERE order_id = " . $orderId . ";"; $delete->query($sql); $sql = "DELETE FROM " . $shipmentTable . " WHERE order_id = " . $orderId . ";"; $delete->query($sql); $sql = "DELETE FROM " . $creditMemoTable . " WHERE order_id = " . $orderId . ";"; $delete->query($sql); // 3. we are done! echo 'Removed order #' . $orderId . PHP_EOL; return true; } catch (Exception $e) { echo "Failed to remove order #" . $orderId . ": " . $e->getMessage() . PHP_EOL; } return false; } /** * iterate over $removeOrderIds */ foreach ($removeOrderIds as $orderId) { deleteOrder($orderId, $useOrderIncrementId); } echo "DONE!" . PHP_EOL; ?>