【发布时间】:2010-12-24 14:54:13
【问题描述】:
我在 magento 中创建了一个网站。现在它已经上线了,我想删除所有测试订单。我知道有一些表以所有这些顺序存储。但我不知道那些表的名称。如果某个机构有任何脚本可以删除所有订单数据。
请给我或请提及存储订单信息的所有表格的名称
【问题讨论】:
我在 magento 中创建了一个网站。现在它已经上线了,我想删除所有测试订单。我知道有一些表以所有这些顺序存储。但我不知道那些表的名称。如果某个机构有任何脚本可以删除所有订单数据。
请给我或请提及存储订单信息的所有表格的名称
【问题讨论】:
粘贴以下代码:
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.";
现在转到命令行并运行:
php remove_test_orders.php
最后删除remove_test_orders.php。
【讨论】:
上面的答案太旧了,这个答案的缺点是它不会清空付款表,所以有可能遗留下来。
您可以使用下面的代码,它也会删除付款信息。
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;
【讨论】:
看看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();
?>
【讨论】:
sales/order,它也可以删除想法! (查看 Sweettooth 奖励)
$order = Mage::getModel('sales/order')->loadByIncrementId($incrementId);。
我设置了一个存储库,用于维护简单的 SQL 脚本,以便在启动新的 Magento 站点之前运行。到目前为止,他们可以提供帮助:
【讨论】:
我创建了一个开源命令行工具
你可以这样使用它:
#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
【讨论】:
几乎所有以前的答案都存在外键约束或错误表名的问题。我能够使用下面的 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_ 更改为您的表格前缀。
【讨论】:
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...');
?>
【讨论】:
试试 Incho 的这个:
【讨论】:
使用此扩展程序,它不仅会删除订单、发票、装运、贷项通知单、RMA,还会恢复所有信息,例如收取税款,将产品删除回库存并重置增量 ID。
如果您在创建订单/发票/发货/贷项通知单/RMA 时出错并想将其删除,那么此扩展程序可以做得很好。
有一个测试站点,您可以先尝试一下,看看它是否适合您。
http://www.magentocommerce.com/magento-connect/ultimate-delete-order.html
【讨论】:
只需获取您的数据库 phpMyadmin,然后打开表 sales_flat_order,然后简单地从该表中删除数据,您的测试订单就会被清除。不需要任何代码或命令。很酷。
【讨论】: