php 删除 Magento 上的所有产品

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8899366/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 05:45:02  来源:igfitidea点击:

Deleting ALL products on Magento

phpmysqlmagento

提问by Jhourlad Estrella

There are a lot of posts regarding this issue on Magento. Most of them work but the problem with Categories not resetting their values to ZERO after executing the delete codes/SQL statements still persists and not being addressed up until now.

Magento 上有很多关于这个问题的帖子。它们中的大多数都可以工作,但是在执行删除代码/SQL 语句后,类别未将其值重置为零的问题仍然存在并且直到现在才得到解决。

Does anyone here has the correct code or procedure to properly delete all products from the inventory and have the Category listing also reset to zero after executing it?

这里有没有人有正确的代码或程序来从库存中正确删除所有产品,并在执行后将类别列表重置为零?

Thanks in advance.

提前致谢。

采纳答案by Jim OHalloran

Regardless of the method used to delete the products, rebuilding the "Category Products" index should fix the counts. Go to System > Index Management. Check the box next to "Category Products", change the action (top right) to "Reindex" and click submit.

无论用于删除产品的方法如何,重建“类别产品”索引都应该修复计数。进入系统 > 索引管理。选中“类别产品”旁边的框,将操作(右上角)更改为“重新索引”,然后单击提交。

回答by Paul Hachmang

Deleting all products from Magento can be easily achieved, just run:

从 Magento 中删除所有产品很容易实现,只需运行:

DELETE FROM `catalog_product_entity`

Because of the foreign key constraints set up in Magento's database, all other tables that have product information in them are cleaned up nicely. It will of course take some time to delete a lot of products, but it at least gets cleaned up nicely.

由于 Magento 数据库中设置的外键约束,所有其他包含产品信息的表都被很好地清理了。删除很多产品当然需要一些时间,但至少它会被很好地清理干净。

If the query can't run because of maximum execution time, you can always run something like:

如果查询因执行时间最长而无法运行,您始终可以运行以下内容:

DELETE FROM `catalog_product_entity` LIMIT 10000

Update: this logic also gets used in Magento's core, so it's safe to use! https://github.com/OpenMage/magento-mirror/blob/magento-1.8/app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php#L462

更新:这个逻辑也用在 Magento 的核心中,所以使用起来很安全!https://github.com/OpenMage/magento-mirror/blob/magento-1.8/app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php#L462

回答by Kervin Ramen

In an stand alone script:

在独立脚本中:

<?php
require 'app/Mage.php';
Mage::app('admin')->setUseSessionInUrl(false);


$products = Mage::getModel('catalog/product')->getCollection();    
foreach ($products as $product) {
    try {
        $product->delete();
    } catch(Exception $e) {
        echo "Product #".$product->getId()." could not be remvoved: ".$e->getMessage();
    }
}

Did that for more that 1400 products, worked fine. You have to do a reindexing after that.

对超过 1400 种产品这样做,效果很好。之后您必须进行重新索引。

Beware the above script will delete ALLyour products

请注意上述脚本将删除您的所有产品

回答by boti

To delete all products you can use this query:

要删除所有产品,您可以使用此查询:

TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_entity`;

TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;

INSERT  INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT  INTO `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) VALUES (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
INSERT  INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');

Regards :)

问候 :)

回答by MagePsycho

In order to delete products, you can simply use backend:
Catalog > Manage Products > Select all checboxes and choose Action = Delete and hit submit.
This may work very good for some thousands of products.

为了删除产品,您可以简单地使用后端:
目录 > 管理产品 > 选择所有复选框并选择操作 = 删除并点击提交。
这可能对数千种产品非常有效。

回答by Shack Ro

Mage::getModel('catalog/product')->getCollection()->delete();

回答by Jake

Worked like a charm...

像魅力一样工作......

Php myadmin - select databse (magento) SWL at top and then pasted the following:

Php myadmin - 在顶部选择数据库(magento)SWL,然后粘贴以下内容:

DELETE FROM `catalog_product_entity`

回答by krishna singh

Tested on Magento 1.7.0.2

在 Magento 1.7.0.2 上测试

    SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_flat_1`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_link_type`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_attribute_pricing`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_enabled_index`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_product_relation`;
TRUNCATE TABLE `catalog_category_product_index`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;
TRUNCATE TABLE `cataloginventory_stock_status_idx`;
TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `core_url_rewrite`;
INSERT  INTO `catalog_product_link_type`(`link_type_id`,`code`) VALUES (1,'relation'),(2,'bundle'),(3,'super'),(4,'up_sell'),(5,'cross_sell');
INSERT  INTO `catalog_product_link_attribute`(`product_link_attribute_id`,`link_type_id`,`product_link_attribute_code`,`data_type`) VALUES (1,2,'qty','decimal'),(2,1,'position','int'),(3,4,'position','int'),(4,5,'position','int'),(6,1,'qty','decimal'),(7,3,'position','int'),(8,3,'qty','decimal');
INSERT  INTO `cataloginventory_stock`(`stock_id`,`stock_name`) VALUES (1,'Default');
TRUNCATE TABLE `catalog_product_entity`;
SET FOREIGN_KEY_CHECKS = 1;

回答by Louis B.

The cleanest solution in my opinion is this:

我认为最干净的解决方案是:

  • Go to System -> Index Managementand set all indexes to "Manual Update" index mode
  • Go to Catalog -> Manage Products, select all products and use the Deleteaction to delete all products.
  • 转到System -> Index Management并将所有索引设置为“手动更新”索引模式
  • 转到Catalog -> Manage Products,选择所有产品并使用Delete操作删除所有产品。

This is not as fast as manually deleting the products from the database but it's probably the fastest proper way to delete all products where you don't have to worry about orphaned database entries or foreign key conflicts.

这不像从数据库中手动删除产品那么快,但它可能是删除所有产品的最快正确方法,您不必担心孤立的数据库条目或外键冲突。

回答by vipul

SELECT * FROM `mage_catalog_product_entity`

gives you the list of products that currently active.

为您提供当前有效的产品列表。