0 votes
1.9k views
in Magento by
How can we truncate the products and categories cleanly within magento please?

2 Answers

0 votes
by
For Categories
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE `catalog_category_entity`;
TRUNCATE TABLE `catalog_category_entity_datetime`;
TRUNCATE TABLE `catalog_category_entity_decimal`;
TRUNCATE TABLE `catalog_category_entity_int`;
TRUNCATE TABLE `catalog_category_entity_text`;
TRUNCATE TABLE `catalog_category_entity_varchar`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `catalog_category_product_index`;

INSERT INTO `catalog_category_entity`(`entity_id`,`entity_type_id`,`attribute_set_id`,`parent_id`,`created_at`,`updated_at`,`path`,`POSITION`,`level`,`children_count`) VALUES (1,3,0,0,'0000-00-00 00:00:00','2009-02-20 00:25:34','1',1,0,1),(2,3,3,0,'2009-02-20 00:25:34','2009-02-20 00:25:34','1/2',1,1,0);

INSERT INTO `catalog_category_entity_int`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES (1,3,32,0,2,1),(2,3,32,1,2,1);

INSERT INTO `catalog_category_entity_varchar`(`value_id`,`entity_type_id`,`attribute_id`,`store_id`,`entity_id`,`value`) VALUES (1,3,31,0,1,'Root Catalog'),(2,3,33,0,1,'root-catalog'),(3,3,31,0,2,'Default Category'),(4,3,39,0,2,'PRODUCTS'),(5,3,33,0,2,'default-category');
SET FOREIGN_KEY_CHECKS = 1;

For Products
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_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');
SET FOREIGN_KEY_CHECKS = 1;
0 votes
by
edited
To delete all products programmatically, please use the following code.
Do set the correct $storeId and $storeCode also
<?php

require_once '../app/Mage.php';

$storeId = 1;
$storeCode = "de";

Mage :: app($storeCode)->setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$products = Mage :: getResourceModel('catalog/product_collection')->setStoreId($storeId)->getAllIds();

if(is_array($products))
{
    foreach ($products as $key => $pId)
    {
        try
        {
            $product = Mage::getModel('catalog/product')->load($pId)->delete();
            echo "successfully deleted product with ID: ". $pId ."\n";
        }
        catch (Exception $e)
        {
            echo "Could not delete product with ID: ". $pId ."\n";
        }
    }
}

Delete all categories
<?php

$idSet = Mage::getModel('catalog/category')->getCollection()->getAllIds();

while ($categoryId = array_shift($idSet))
{

    try {
        $category = Mage::getModel("catalog/category")->load($categoryId);
        if (!$category->hasChildren())
        {
            echo "Delete $categoryId ...";
            $category->delete();
            echo PHP_EOL;
        }
        else
        {
            $idSet[] = $categoryId;
        }
    } catch (Exception $e) {
        echo $e->getMessage();
    }

    echo PHP_EOL;

}

echo PHP_EOL;

?>

Or here is another method to do the delete categories. 
(please use one above or below, both does the same job).
<?php

require_once dirname(__FILE__) . '/app/Mage.php';
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));

$resource = Mage::getSingleton('core/resource');
$db_read = $resource->getConnection('core_read');

$categories = $db_read->fetchCol("
    SELECT entity_id
    FROM " . $resource->getTableName("catalog_category_entity") . "
    WHERE entity_id>1
    ORDER BY entity_id DESC
");

foreach ($categories as $category_id) {
    try {
        Mage::getModel("catalog/category")->load($category_id)->delete();
    } catch (Exception $e) {
        echo $e->getMessage() . "\n";
    }
}
?> 

Related questions

+1 vote
1 answer 1.9k views
0 votes
1 answer 1.5k views
0 votes
1 answer 1.3k views
asked Jul 11, 2016 in Magento by Roger Dodd
0 votes
0 answers 1.3k views
+1 vote
1 answer 1.2k views
0 votes
1 answer 1.8k views
...