カテゴリエラー:同じID「191」のアイテム(Magento \ Catalog \ Model \ Category \ Interceptor)は既に存在します


9

製品に関して同様の問題があることは知っていますが、カテゴリでこのエラーが発生しました。

私が何か違うことをしたことは思い出せません。フロントエンドのカテゴリページにアクセスするとすぐに突然、このエラーがスローされ始めました。

管理者でカテゴリを再保存すると問題が解決する場合がありますが、ほとんどの場合は解決しません。このエラーはどこから発生しますか?それを修正するには?他の誰かもこのエラーに遭遇しましたか?

編集する

カテゴリページがURLのURL書き換えテーブルを要求するようです。それはこのクエリを生成します:

SELECT `e`.*, 
   IF(at_is_active.value_id > 0, at_is_active.value, 
   at_is_active_default.value) AS 
   `is_active`, 
   `url_rewrite`.`request_path` 
FROM   `catalog_category_entity` AS `e` 
   INNER JOIN `catalog_category_entity_int` AS `at_is_active_default` 
           ON ( `at_is_active_default`.`entity_id` = `e`.`entity_id`) 
              AND ( `at_is_active_default`.`attribute_id` = '46' ) 
              AND `at_is_active_default`.`store_id` = 0 
   LEFT JOIN `catalog_category_entity_int` AS `at_is_active` 
          ON ( `at_is_active`.`entity_id` = `e`.`entity_id` ) 
             AND ( `at_is_active`.`attribute_id` = '46' ) 
             AND ( `at_is_active`.`store_id` = 1 ) 
   LEFT JOIN `url_rewrite` 
          ON ( url_rewrite.entity_id = e.entity_id ) 
             AND ( url_rewrite.is_autogenerated = 1 
                   AND url_rewrite.store_id = 1 
                   AND url_rewrite.entity_type = 'category' ) 
WHERE  ( IF(at_is_active.value_id > 0, at_is_active.value,   
     at_is_active_default.value) 
            = 
            '1' ) 
   AND ( `e`.`entity_id` IN( '10', '170', '171', '172', 
                             '173', '175', '176', '177', 
                             '178', '179', '180', '189', '276' ) ) 
ORDER  BY `e`.`position` ASC 

しかし、url_rewrite-tableが破損している場合(これはおそらく私の場合です)、IDが重複することになります。


2
Sometimes re-saving the category in the admin resolved the issueこれは私のために働いた、ありがとう!!
nuwaus 2017年

3
同じ問題がありますが、カテゴリを再保存しても解決しません。
Oliver Schmid 2017年

誰かが修正を見つけましたか?私は同じ問題を抱えています、私にとってそれは奇妙です。3つのストアのみで作成された10のストアがあり、1つがデフォルトストアです。カタログページは機能しますが、他のストアでは機能しません。ホームページがカタログページであるように設定しました
Gianni Di Falco

回答:


11
  1. 「entity_type」が「category」である「url_rewrite」テーブルからレコードを削除します。
  2. 走る php bin/magento indexer:reindex

これには3000レコードがあるため、この作業を行うにはテーブルを切り捨てる必要があります:(
fudu

3
  1. [管理パネル]> [マーケティング]> [URL書き換え]に移動します。
  2. targer_pathの「category / {entity_id}(これにより、すでに存在するエラーが発生します)」でフィルタリングします。同じストアに同じtarget_pathが見つかった場合は、それを削除します。
  3. 走る php bin/magento indexer:reindex

3

次のSQLクエリは、重複するカテゴリの書き換えをクリーンアップします。バックアップなしで使用しないでください。

n98-magerun2 db:consoleまたはその他のmysqlクライアントを使用できます。

 delete
  from url_rewrite
  where url_rewrite_id in (
    select url_rewrite_id
    FROM (select url_rewrite_id
      from url_rewrite
      where entity_type = 'category'
      group by target_path, store_id
      having count(*) > 1) t
  )

0

私たちにとっては、これを実行するだけでうまくいきました:

php bin/magento indexer:reindex

(Magento 2.2.2を使用した)私たちのエラーは、フロントエンド検索を実行するとき、またはカテゴリを入力するときのエラーです。

例外#0(例外):同じID「XXXX」のアイテム(Magento \ Catalog \ Model \ Product \ Interceptor)は既に存在します。


このコメントがダウンレートされた理由はわかりませんが、インデックスの再作成により実際に2.3.4のエラーが修正されました
パンタブル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.