Удалить все заказы старше определенной даты с помощью запроса бд


Мне нужно удалить около 7500 заказов и сохранить заказы с 26.08.2016 и далее. Я хотел бы сделать это с помощью запроса к бд. Возможно ли это или я должен придерживаться панели администратора?

Author: Marius, 2016-09-01

2 answers

Вы можете попробовать это, но сначала сделайте резервную копию на случай, если я ошибаюсь.
Я не рекомендую использовать прямые запросы, потому что вы можете получить данные зомби.
Вы можете создать сценарий:

Сначала сообщите скрипту, что вы находитесь в административной области:

Mage::register('isSecureArea', true);

Затем получите приказы:

$orders = Mage::getModel('sales/order')->getCollection()
     ->addFieldToFilter('created_at', array('lt' => '2016-08-26'));  

Теперь для каждого заказа вам необходимо удалить счета-фактуры, элементы счетов-фактур, отгрузки, элементы отгрузки, кредитные примечания, элементы кредитных примечаний, элементы заказа, ссылки на платежи, предложения, предложения и в завершите сам заказ.

foreach ($orders as $order) {
    //delete invoices
    $invoices = $order->getInvoiceCollection();
    foreach ($invoices as $invoice) {
        //invoice items will be deleted as well
        $invoice->delete();
    }
    //delete invoices
    $shipments = $order->getShipmentsCollection();
    foreach ($shipments as $shipment) {
        //shipment items will be deleted as well
        $shipment->delete();
    }
    //delete credit notes
    $creditMemos = $order->getCreditmemosCollection();
    foreach ($creditMemos as $creditMemo) {
        //credit note items will be deleted as well
        $creditMemo->delete();
    }
    //delete payment references
    $payments = $order->getPaymentsCollection();
    foreach ($payments as $payment) {
        $payment->delete();
    }
    //delete quote
    $quote = Mage::getModel('sales/quote')->load($order->getQuoteId());  
    if ($quote->getId()) {
        foreach ($quote->getAllItems() as $item) {
            $item->delete();
        }
        $quote->delete();
    }
    //delete the order. items will be deleted as well. So does addresses.
    $order->delete();
}
 3
Author: Marius, 2016-09-01 08:57:45

Вы можете использовать расширение для удаления заказа, чтобы удалить заказ. Просто выберите заказ между датами, отфильтруйте его. Выберите весь этот заказ и выберите действие в поле выбрать, чтобы удалить заказ и отправить.

Расширение:: https://www.magentocommerce.com/magento-connect/delete-orders-6.html

 1
Author: Ashish Jagnani, 2016-09-01 08:24:46