【问题标题】:how can I delete test order from magento如何从 magento 中删除测试订单
【发布时间】:2010-12-24 14:54:13
【问题描述】:

我在 magento 中创建了一个网站。现在它已经上线了,我想删除所有测试订单。我知道有一些表以所有这些顺序存储。但我不知道那些表的名称。如果某个机构有任何脚本可以删除所有订单数据。

请给我或请提及存储订单信息的所有表格的名称

【问题讨论】:

标签: php magento


【解决方案1】:
  1. 转到管理>销售>订单
  2. 记下您的测试订单增量 ID,例如 100000001,100000002,100000003,100000111,100000112,100000199
  3. 现在在magento根目录下创建一个php文件并命名为:remove_test_orders.php
  4. 粘贴以下代码:

    require 'app/Mage.php';
    Mage::app('admin')->setUseSessionInUrl(false);                                                                                                                 
    //replace your own orders numbers here:
    $test_order_ids=array(
      '100000001',
      '100000002',
      '100000003',
      '100000111',
      '100000112',
      '100000199',
    );
    foreach($test_order_ids as $id){
        try{
            Mage::getModel('sales/order')->loadByIncrementId($id)->delete();
            echo "order #".$id." is removed".PHP_EOL;
        }catch(Exception $e){
            echo "order #".$id." could not be remvoved: ".$e->getMessage().PHP_EOL;
        }
    }
    echo "complete.";
    
  5. 现在转到命令行并运行:

    php remove_test_orders.php

  6. 最后删除remove_test_orders.php。

【讨论】:

  • 嘿.. 有没有代码可以删除订单并重新平衡库存,也就是将数量添加回产品
  • 嘿,我使用了上面的代码。但我的订单网格中仍然显示订单。当我点击订单时,它显示“订单不再存在”。我觉得出了点问题。
  • 我已经重新索引了我的数据并且遇到了与壁画相同的问题
  • 我可以确认这适用于 Magento 版本。 1.9.0.1。它似乎也在删除与订单相关的所有相关数据,如发票、交易等。
  • 我创建了一个命令行工具,如果有人感兴趣:github.com/mauricioprado00/magento-delete-order/releases
【解决方案2】:

上面的答案太旧了,这个答案的缺点是它不会清空付款表,所以有可能遗留下来。
您可以使用下面的代码,它也会删除付款信息。

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `sales_order_aggregated_created`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

SET FOREIGN_KEY_CHECKS=1; 

【讨论】:

  • 这将删除所有订单,而不仅仅是问题要求的测试订单。在运行之前要小心。
【解决方案3】:

看看How to delete orders from Magento

<?php
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Varien_Profiler::enable();
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app('default');
Mage::register('isSecureArea', 1);
//until here you gained access to the Magento models. The rest is custom code

$orderId = 156;//put here the id of the order you want to delete. THE ONE FROM THE DATABASE NOT THE INCREMENT_ID

$order = Mage::getModel('sales/order')->load($orderId);

$invoices = $order->getInvoiceCollection();
foreach ($invoices as $invoice){
   $invoice->delete();
}

$creditnotes = $order->getCreditmemosCollection();
foreach ($creditnotes as $creditnote){
   $creditnote->delete();
}

$shipments = $order->getShipmentsCollection();
foreach ($shipments as $shipment){
   $shipment->delete();
}

$order->delete();
?>

【讨论】:

  • 我更喜欢这种方法。因为它还清除发票、信用票据和装运。而我不确定接受的答案是否有效。 +1
  • 如果你有一个覆盖普通订单模型的扩展,你只需加载扩展订单集合而不是sales/order,它也可以删除想法! (查看 Sweettooth 奖励)
  • 如果要按增量 id 加载,请使用 $order = Mage::getModel('sales/order')-&gt;loadByIncrementId($incrementId);
【解决方案4】:

我设置了一个存储库,用于维护简单的 SQL 脚本,以便在启动新的 Magento 站点之前运行。到目前为止,他们可以提供帮助:

  1. 来自 Mage 的空测试数据;订单、客户、报告、日志等。
  2. 来自各种扩展的空测试数据
  3. 为下一个订单、发票、装运和贷项备忘录设置所需的 ID

https://github.com/ccondrup/mage-reset
帮助改进他们!

【讨论】:

    【解决方案5】:

    我创建了一个开源命令行工具

    你可以这样使用它:

    #delete order by increment id
    php -f shell/delete-order.php -- --increment-id 100000001
    
    #test delete order by increment id (wont actually delete it)
    php -f shell/delete-order.php -- --dry-run --order-id 32
    

    https://github.com/mauricioprado00/magento-delete-order/releases

    【讨论】:

    • 谢谢,这很方便 :)
    【解决方案6】:

    几乎所有以前的答案都存在外键约束或错误表名的问题。我能够使用下面的 SQL 在 Magento v 1.9.1.0 CE 上实现删除,我修改了之前答案中给出的 SQL:

        SET FOREIGN_KEY_CHECKS=0;
    TRUNCATE `mg_sales_flat_creditmemo`;
    TRUNCATE `mg_sales_flat_creditmemo_comment`;
    TRUNCATE `mg_sales_flat_creditmemo_grid`;
    TRUNCATE `mg_sales_flat_creditmemo_item`;
    TRUNCATE `mg_sales_flat_invoice`;
    TRUNCATE `mg_sales_flat_invoice_comment`;
    TRUNCATE `mg_sales_flat_invoice_grid`;
    TRUNCATE `mg_sales_flat_invoice_item`;
    TRUNCATE `mg_sales_flat_order`;
    TRUNCATE `mg_sales_flat_order_address`;
    TRUNCATE `mg_sales_flat_order_grid`;
    TRUNCATE `mg_sales_flat_order_item`;
    TRUNCATE `mg_sales_flat_order_payment`;
    TRUNCATE `mg_sales_flat_order_status_history`;
    TRUNCATE `mg_sales_flat_quote`;
    TRUNCATE `mg_sales_flat_quote_address`;
    TRUNCATE `mg_sales_flat_quote_address_item`;
    TRUNCATE `mg_sales_flat_quote_item`;
    TRUNCATE `mg_sales_flat_quote_item_option`;
    TRUNCATE `mg_sales_flat_quote_payment`;
    TRUNCATE `mg_sales_flat_quote_shipping_rate`;
    TRUNCATE `mg_sales_flat_shipment`;
    TRUNCATE `mg_sales_flat_shipment_comment`;
    TRUNCATE `mg_sales_flat_shipment_grid`;
    TRUNCATE `mg_sales_flat_shipment_item`;
    TRUNCATE `mg_sales_flat_shipment_track`;
    TRUNCATE `mg_sales_invoiced_aggregated`;
    TRUNCATE `mg_sales_invoiced_aggregated_order`;
    TRUNCATE `mg_sales_order_aggregated_created`;
    TRUNCATE `mg_sendfriend_log`;
    TRUNCATE `mg_tag`;
    TRUNCATE `mg_tag_relation`;
    TRUNCATE `mg_tag_summary`;
    TRUNCATE `mg_wishlist`;
    TRUNCATE `mg_log_quote`;
    TRUNCATE `mg_report_event`;
    ALTER TABLE `mg_sales_flat_creditmemo` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_creditmemo_item` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_invoice` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_invoice_comment` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_invoice_grid` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_invoice_item` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_order` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_order_address` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_order_grid` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_order_item` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_order_payment` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_order_status_history` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote_address` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote_address_item` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote_item` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote_item_option` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote_payment` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_shipment` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_shipment_comment` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_shipment_grid` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_shipment_item` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_flat_shipment_track` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_invoiced_aggregated` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sales_order_aggregated_created` AUTO_INCREMENT=1;
    ALTER TABLE `mg_sendfriend_log` AUTO_INCREMENT=1;
    ALTER TABLE `mg_tag` AUTO_INCREMENT=1;
    ALTER TABLE `mg_tag_relation` AUTO_INCREMENT=1;
    ALTER TABLE `mg_tag_summary` AUTO_INCREMENT=1;
    ALTER TABLE `mg_wishlist` AUTO_INCREMENT=1;
    ALTER TABLE `mg_log_quote` AUTO_INCREMENT=1;
    ALTER TABLE `mg_report_event` AUTO_INCREMENT=1;
    
    SET FOREIGN_KEY_CHECKS=1; 
    

    记得将mg_ 更改为您的表格前缀。

    【讨论】:

    • 非常有用的家伙。谢谢。
    【解决方案7】:
    Create a file in the root directory and paste the following code.
    It will remove all the orders from admin grid!
    
    <?php
    
    /**
     * @author Dejan Radic <dejan.radic@inchoo.net>
     */
    
    if (version_compare(phpversion(), '5.2.0', '<')===true) {
        echo  '<div style="font:12px/1.35em arial, helvetica, sans-serif;"><div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;"><h3 style="margin:0; font-size:1.7em; font-weight:normal; text-transform:none; text-align:left; color:#2f2f2f;">Whoops, it looks like you have an invalid PHP version.</h3></div><p>Magento supports PHP 5.2.0 or newer. <a href="http://www.magentocommerce.com/install" target="">Find out</a> how to install</a> Magento using PHP-CGI as a work-around.</p></div>';
        exit;
    }
    
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', 1);
    
    $mageFilename = 'app/Mage.php';
    
    if (!file_exists($mageFilename)) {
        echo $mageFilename." was not found";
        exit;
    }
    
    require_once $mageFilename;
    
    Mage::app();
    
    $executionPath = null;
    
    /*
     * determine Magento Edition
     */
    if (file_exists('LICENSE_EE.txt')) {
        $edition = 'EE';
    }elseif (file_exists('LICENSE_PRO.html')) {
        $edition = 'PE';
    } else {
        $edition = 'CE';    
    }
    
    if(($edition=='EE' && version_compare(Mage::getVersion(), '1.11.0.0.', '<')===true)
            || ($edition=='PE' && version_compare(Mage::getVersion(), '1.11.0.0.', '<')===true)
            || ($edition=='CE' && version_compare(Mage::getVersion(), '1.6.0.0.', '<')===true)
      ){
       $executionPath = 'old'; 
    } else {
       $executionPath = 'new';  
    }
    
    $xpathEntity = 'global/models/sales_entity/entities//table';
    
    if ($executionPath == 'old') {
        $xpathResource = 'global/models/sales_mysql4/entities//table';
    } else {
        $xpathResource = 'global/models/sales_resource/entities//table';
    }
    
    $salesEntitiesConf = array_merge(
        Mage::getSingleton('core/config')->init()->getXpath($xpathEntity), 
        Mage::getSingleton('core/config')->init()->getXpath($xpathResource)
    );
    
    $resource = Mage::getSingleton('core/resource');
    $connection = $resource->getConnection('core_write');
    
    
    /*
     * If you want delete System/Order Statuses (Status and State) you
     * should comments below lines (46-51)
     */
    $skipTables = array (
            $resource->getTableName('sales_order_status'),
            $resource->getTableName('sales_order_status_state'),
            $resource->getTableName('sales_order_status_label')
        );
    $salesEntitiesConf = array_diff($salesEntitiesConf, $skipTables);
    
    
    /*
    
    Multiple RDBMS Support in Magento CE 1.6+ / EE 1.11+
        http://www.magentocommerce.com/images/uploads/RDBMS_Guide2.pdf
    
    2.2. Adapters:
    
    ... The new Varien_DB_Adapter_Interface was added to sign a contract that all 
    developed adapters must execute in order to get Magento working on an actual 
    database. The interface describes the list of methods and constants that can be used by resource models...
    
    Used below in the loop:
    
     * If $executionPath == 'old'
        * Varien_Db_Adapter_Pdo_Mysql::showTableStatus()
        * Varien_Db_Adapter_Pdo_Mysql::truncate()  
     * Else
        * Varien_Db_Adapter_Interface::isTableExists()
        * Varien_Db_Adapter_Interface::truncateTable()
    
    */
    
    while ($table = current($salesEntitiesConf) ){
        $table = $resource->getTableName($table);
    
        if ($executionPath == 'old') {
            $isTableExists = $connection->showTableStatus($table);
        } else {
            $isTableExists = $connection->isTableExists($table);
        }
        if ($isTableExists) {
            try {
                if ($executionPath == 'old') {
                    $connection->truncate($table);
                } else {
                    $connection->truncateTable($table);
                }
    
                printf('Successfully truncated the <i style="color:green;">%s</i> table.<br />', $table);
            } catch(Exception $e) {
                printf('Error <i style="color:red;">%s</i> occurred truncating the <i style="color:red;">%s</i> table.<br />', $e->getMessage(), $table);
            }
        }
    
        next($salesEntitiesConf);
    }
    
    exit('All done...');
    
    ?>
    

    【讨论】:

      【解决方案8】:

      试试 Incho 的这个:

      Delete test orders in Magento

      【讨论】:

      • 我试图复制/粘贴到 vim 中,结果得到了一堆奇怪的字符。接受的答案对我有用。
      【解决方案9】:

      使用此扩展程序,它不仅会删除订单、发票、装运、贷项通知单、RMA,还会恢复所有信息,例如收取税款,将产品删除回库存并重置增量 ID。

      如果您在创建订单/发票/发货/贷项通知单/RMA 时出错并想将其删除,那么此扩展程序可以做得很好。

      有一个测试站点,您可以先尝试一下,看看它是否适合您。

      http://www.magentocommerce.com/magento-connect/ultimate-delete-order.html

      【讨论】:

        【解决方案10】:

        只需获取您的数据库 phpMyadmin,然后打开表 sales_flat_order,然后简单地从该表中删除数据,您的测试订单就会被清除。不需要任何代码或命令。很酷。

        【讨论】:

          猜你喜欢
          • 2014-09-23
          • 2016-10-18
          • 2012-09-16
          • 1970-01-01
          • 2012-10-20
          • 2013-12-23
          • 2013-02-26
          • 2011-04-01
          • 2019-04-23
          相关资源
          最近更新 更多