web-dev-qa-db-fra.com

Supprimer TOUS les produits sur Magento

Il y a beaucoup de messages concernant ce problème sur Magento. La plupart d'entre eux fonctionnent, mais le problème avec les catégories qui ne réinitialisent pas leurs valeurs à zéro après l'exécution des codes de suppression/instructions SQL persiste et n'est pas résolu jusqu'à présent.

Quelqu'un at-il le bon code ou la bonne procédure pour supprimer correctement tous les produits de l’inventaire et que la liste des catégories soit également remise à zéro après son exécution?

Merci d'avance.

17
Jhourlad Estrella

Quelle que soit la méthode utilisée pour supprimer les produits, la reconstruction de l'index "Catégorie de produits" devrait corriger les comptes. Allez dans Système> Gestion des index. Cochez la case "Catégorie de produits", modifiez l'action (en haut à droite) en "Réindexer" et cliquez sur Soumettre.

4
Jim OHalloran

Suppression de tous les produits de Magento peut être facilement réalisée, exécutez simplement:

DELETE FROM `catalog_product_entity`

En raison des contraintes de clé étrangère définies dans la base de données de Magento, toutes les autres tables contenant des informations sur le produit sont bien nettoyées. Bien sûr, il faudra un certain temps pour supprimer un grand nombre de produits, mais au moins, tout se nettoiera bien.

Si la requête ne peut pas être exécutée à cause du temps d'exécution maximal, vous pouvez toujours exécuter quelque chose comme:

DELETE FROM `catalog_product_entity` LIMIT 10000

Mise à jour: Cette logique est également utilisée dans le noyau de Magento, donc son utilisation est sûre! https://github.com/OpenMage/magento-mirror/blob/magento-1.8/app/code/core/Mage/ImportExport/Model/Import/Entity/Product.php#L462

55
Paul Hachmang

Dans un script autonome:

<?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();
    }
}

Est-ce que cela pour plus de 1400 produits, a bien fonctionné. Vous devez faire une réindexation après cela.

Attention, le script ci-dessus supprimera TOUT vos produits

13
Kervin Ramen

Pour supprimer tous les produits, vous pouvez utiliser cette requête:

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');

Cordialement :)

5
boti

Pour supprimer des produits, vous pouvez simplement utiliser le backend:
Catalogue> Gérer les produits> Sélectionnez toutes les boîtes aux lettres et choisissez Action = Supprimer et appuyez sur Soumettre.
Cela peut fonctionner très bien pour des milliers de produits.

3
MagePsycho
Mage::getModel('catalog/product')->getCollection()->delete();
2
Shack Ro

Testé sur 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;
1
krishana singh

Travaillé comme un charme ...

Php phpmyadmin - sélectionnez la base de données (magento) SWL en haut puis collez le texte suivant:

DELETE FROM `catalog_product_entity`
1
Jake

La solution la plus propre à mon avis est la suivante:

  • Allez à System -> Index Management et réglez tous les index sur le mode d'index "Mise à jour manuelle".
  • Allez à Catalog -> Manage Products, sélectionnez tous les produits et utilisez l'action Delete pour supprimer tous les produits.

Ce n'est pas aussi rapide que de supprimer manuellement les produits de la base de données, mais c'est probablement le moyen le plus rapide de supprimer tous les produits pour lesquels vous n'avez pas à vous soucier des entrées de base de données orphelines ou des conflits de clés étrangères.

0
Louis B.