Magento 2:すべてのカテゴリを一度に削除する方法は?


9

既存のデータベース(Magentoではない)をMagento 2に同期する実験を行っています。

このプロセスでは、1000を超えるカテゴリを作成しましたが、システムと同期するようにすべてのIDを再配置しました。問題は、「指定されたストアのURLキーが既に存在する」というエラーが発生したため、新しいカテゴリをインポートできなくなったことです。現在、重複するカテゴリを取得しています。

私は最良の解決策はそれらをすべて取り除き、新鮮に輸入することだと思います。私は1.9のこのチュートリアルを見つけました

https://gist.github.com/jklance/9664371

新しいデータベースを見ると、小さな違いに気づきました

  1. entity_type_idはすべての古いカテゴリテーブルにありますが、新しいテーブルにはありません。

  2. 新しいデータベースには、追加のテーブルcatalog_category_product_index_tmpがあります

私の質問はこれらです、

  1. 見つけて変更したコードを使用して、entity_type_idを削除 して追加できTRUNCATE TABLE catalog_category_product_index_tmpますか。

  2. それとも私が変更する必要がある以上ですか?

  3. または、すべてのカテゴリを削除するためのクリーンなスクリプトを提供してもらえますか?

システムにはテスト製品が1つしかないので、心配する必要はありません。

回答:


19

これはMagento ver。で私のために働いた。2.1.0

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`, `attribute_set_id`, `parent_id`, `created_at`, `updated_at`, `path`, `position`, `level`, `children_count`) VALUES ('1', '0', '0', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '1', '0', '0', '1'),
('2', '3', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '1/2', '1', '1', '0');

INSERT INTO `catalog_category_entity_int` (`value_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES 
('1', '69', '0', '1', '1'),
('2', '46', '0', '2', '1'),
('3', '69', '0', '2', '1');

INSERT INTO `catalog_category_entity_varchar` (`value_id`, `attribute_id`, `store_id`, `entity_id`, `value`) VALUES 
('1', '45', '0', '1', 'Root Catalog'),
('2', '45', '0', '2', 'Default Category');

SET FOREIGN_KEY_CHECKS = 1;

DELETE FROM url_rewrite WHERE entity_type = 'category';

他の人が知っているように、これは私にとって完璧に機能しました。タイプミスを修正しても、他の回答の1つはうまくいきませんでした。
Hassan Al-Jeshi 2016

Magento 2.2.3で後で製品を作成するときに問題が発生します。製品の作成時にスタック:No such entity with id = 3
Condor

4

これはMagento EE 2.1のすべてのカテゴリを削除します

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`, `created_in`, `updated_in`, `attribute_set_id`, `parent_id`, `created_at`, `updated_at`, `path`, `position`, `level`, `children_count`) VALUES 
('1', '1', '2', '0', '0', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '1', '0', '0', '1'),
('2', '1', '2', '3', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '1/2', '1', '1', '0');

INSERT INTO `catalog_category_entity_int` (`value_id`, `attribute_id`, `store_id`, `row_id`, `value`) VALUES 
('1', '69', '0', '1', '1'),
('2', '46', '0', '2', '1'),
('3', '69', '0', '2', '1');

INSERT INTO `catalog_category_entity_varchar` (`value_id`, `attribute_id`, `store_id`, `row_id`, `value`) VALUES 
('1', '45', '0', '1', 'Root Catalog'),
('2', '45', '0', '2', 'Default Category');

SET FOREIGN_KEY_CHECKS = 1;

DELETE FROM url_rewrite WHERE entity_type = 'category';
DELETE FROM `sequence_catalog_category` WHERE sequence_value > 2;

3

次の例では、ルートカテゴリ以外のすべてのカテゴリmagentoをプログラムで削除します。

function deleteAllCategories($objectManager) {

$categoryFactory = $objectManager->get('Magento\Catalog\Model\CategoryFactory');
$newCategory = $categoryFactory->create();
$collection = $newCategory->getCollection();
$objectManager->get('Magento\Framework\Registry')->register('isSecureArea', true);

foreach($collection as $category) {

    $category_id = $category->getId();

    if( $category_id <= 2 ) continue;

    try {
        $category->delete();
        echo 'Category Removed '.$category_id .PHP_EOL;
    } catch (Exception $e) {
        echo 'Failed to remove category '.$category_id .PHP_EOL;
        echo $e->getMessage() . "\n" .PHP_EOL;
    }
}

}

詳しい説明はこちらをクリックしてください。 http://www.pearlbells.co.uk/mass-delete-magento-2-categories-programmatically/


これは削除後にカテゴリIDをリセットしますか?
アミット・シン

いいえ、リセットされません。n+ 1から開始します(nは前のバージョンの最後のカテゴリーIDです)
Liz Eipe C

3

(Magento 2.2で動作)

トリガーと外部キーが適切に機能する場合、どうなるでしょうか、これはどのように機能するかです。

DELETE FROM `catalog_category_entity` WHERE `entity_id` >= 3;
ALTER TABLE `catalog_category_entity` AUTO_INCREMENT = 3;

1

@Lizの答えを修正する

public function deleteStoreCategories()
{
    $objectManager = Magento\Framework\App\ObjectManager::getInstance();
    $categoryFactory = $objectManager->get('Magento\Catalog\Model\CategoryFactory');
    $newCategory = $categoryFactory->create();
    $collection = $newCategory->getCollection();
    $objectManager->get('Magento\Framework\Registry')->register('isSecureArea', true);

    foreach ($collection as $category) {
        $category_id = $category->getId();

        if ($category_id <= 2) {
            continue;
        }

        try {
            $category->delete();
            echo 'Category Removed ' . $category_id . PHP_EOL;
        } catch (\Exception $e) {
            echo 'Failed to remove category ' . $category_id . PHP_EOL;
            echo $e->getMessage() . "\n" . PHP_EOL;
        }
    }
}

1

私は最近これを使用しており、Magento 2.1 では明らかに成功しています:

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`,`created_at`,`updated_at`,`attribute_set_id`,`parent_id`,`path`,`POSITION`,`level`,`children_count`) 
    VALUES  (1,'2020-05-06 17:27:35','2020-05-06 17:27:35',0,0,'1',0,0,1),
            (2,'2020-05-06 17:27:35','2020-05-06 17:27:35',3,1,'1/2',1,1,0); 
INSERT INTO `catalog_category_entity_int`
    (`value_id`,`attribute_id`,`store_id`,`entity_id`,`value`) 
    VALUES  (1,69,0,1,1),
            (2,46,0,2,1),
            (3,69,0,2,1); 
INSERT INTO `catalog_category_entity_varchar`
    (`value_id`,`attribute_id`,`store_id`,`entity_id`,`value`)
    VALUES  (1,45,0,1,'Root Catalog'),
            (2,45,0,2,'Default Category'),
            (3,52,0,2,'PRODUCTS');
SET FOREIGN_KEY_CHECKS = 1;
DELETE FROM url_rewrite WHERE entity_type = 'category';

INSERT文は完全にクリーンインストールMagentoの2の内容に基づいています。


0

Magento EE 2.2.6

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;

TRUNCATE TABLE `sequence_catalog_category`;

TRUNCATE TABLE `visual_merchandiser_rule`;

INSERT INTO `catalog_category_entity` (`entity_id`, created_in, updated_in, `attribute_set_id`, `parent_id`, `created_at`, `updated_at`, `path`, `position`, `level`, `children_count`) 
VALUES ('1', '1', '2147483647', '0', '0', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '1', '0', '0', '1'),
('2', '1', '2147483647', '3', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '1/2', '1', '1', '0');

INSERT INTO `catalog_category_entity_int` (`value_id`, `attribute_id`, `store_id`, `row_id`, `value`) VALUES 
('1', '70', '0', '1', '1'),
('2', '47', '0', '2', '1'),
('3', '70', '0', '2', '1');

INSERT INTO `catalog_category_entity_varchar` (`value_id`, `attribute_id`, `store_id`, `row_id`, `value`) VALUES 
('1', '46', '0', '1', 'Root Catalog'),
('2', '46', '0', '2', 'Default Category');

INSERT INTO `sequence_catalog_category`(`sequence_value`) VALUES 
('1'),
('2');

SET FOREIGN_KEY_CHECKS = 1;

DELETE FROM url_rewrite WHERE entity_type = 'category';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.