Magento 2の再インデックスは、そのようなエンティティを返しません


14

カタログをMagento 1.9.2.3からMagento 2.0.2に正常に移行しました。移行後、コマンドを使用してインデックスの再作成を行いましたphp bin/magento indexer:reindex

インデックスcatalog_category_productとを除き、すべてが正常に再インデックス付けされ、シェルcatalog_product_categoryで返さNo such entity.Reindex Required、admin で通知されます。チェックしましたvar/log/が、エラーはありません。

その結果、製品はバックエンドのカテゴリに追加されますが、フロントエンドではカテゴリが空で表示されます。

この問題の原因は何ですか?どうすればデバッグできますか?


回答:


7

ラファエルに加えて:

デバッグ目的で(xdebugまたは古いダンプによって)例外コンストラクターを変更して、このコードをデバッグしました。今のところ例外の構成を変更します(ファイルは\lib\internal\Magento\Framework\Exception\NoSuchEntityException.php

$trace = debug_backtrace();
var_dump($trace[1]['class'] . '::' . $trace[1]['function'] . '('.$trace[1]['line'] .')';
die();

その後、スタックを1つ上に移動し、指定された引数を確認します(引数はデバッグバックトレースでも使用できますが、magentoオブジェクトのダンプは実際にはブラウザーフレンドリーではありません)。

storeGroupRepositoryグループIDが見つからない場所にあるという結論に至りました。ストアテーブルに分割し、ストアテーブルに、参照してstore_groupいる行にない行を数行見ましたstore_group存在しない(ストアグループは関連するテーブルに存在しません)。

障害のあるストアの行を削除し、それ以降エラーはなくなりました。

しかし、それは別のテーブル/その他の理由にもあることに注意してください。この場合、たとえばWebサイト、ストア自体、またはストアグループ。したがって、それは常に自分で実行する必要のある小さな検索です。

また、これらのストアへの参照が非常に多くあることもわかりました。また、dbでそれらを手動で削除しました。これは退屈な作業ですが、問題を解決します。

また、ハックを削除することを忘れないでください。


代わりにxdebugを使用しないのはなぜですか?
ルーク

@TimVroom私も同じエラーがあります 。magento.stackexchange.com
q /

10

これが追加するには遅すぎるかどうかはわかりませんが、私がこれを持っていたとき、0に設定する必要があるいくつかのエンティティIDによって引き起こされたようです。

このスクリプトは私のために働いた:

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;

それが役に立てば幸い。


これは私を大いに助けてくれました、共有してくれてありがとう!
FAVO

これも私のために働いた:)
オーウェン

3

わかりましたので、No such entity.エラーメッセージはから来てい\lib\internal\Magento\Framework\Exception\NoSuchEntityException.phpます。

このクラスは、Magentoのカスタム例外クラスであり、Magento 2で多く使用されています。

次のようなコードが表示された場合:

catch (NoSuchEntityException $e)

または

throw NoSuchEntityException;

このクラスは使用されています。

あなたの場合の問題は、その例外がどこからスローされているかを見つけるのが難しいということです。

そのため、少し絞り込むために、失敗したインデックスに関連する2つのクラスのデバッグを開始できます。

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_productインデックス
  • Magento\Catalog\Model\Indexer\Product\Category=> catalog_product_categoryインデックス

幸いなことに、2番目のものは最初のものを拡張するので、1つの出発点が得られます。

このインデクサークラスはそれぞれ、アクション行クラスを使用して再インデックス付けを処理することに注意してください。

  • Magento\Catalog\Model\Indexer\Product\Category\Action\Rows
  • Magento\Catalog\Model\Indexer\Category\Product\Action\Rows

私にとっては、これらのアクション行クラスは、これらの2つのインデックスのインデックスを再作成する直接のクラスなので、デバッグを開始する必要があります。

問題の発見に役立つことを本当に願っています。


こんにちは@Raphaelは、私は私migration.Pleaseヘルプ後の顧客を作成するための同様の問題持って magento.stackexchange.com/q/236187/24878
akgola

0

これはすべてを試した後、私のために働いた。

あなたのサイトがにいると仮定してDeveloper Mode、それを変更してProduction Modeキャッシュをクリア/フラッシュしてから、に切り替えることができますDeveloper Mode

データベースをあるサーバーから別のサーバーに最近移動したため、フロントエンドでこの問題が発生しました。私はこの方法で解決することができました。

これが一つの助けになりますように。



0

私の場合、このエラーはマルチストア、マルチドメインのセットアップに関するものでした。Magentoは店舗コードを切り捨てます。ドメインを店舗コードにマッピングする場合は、店舗コードがindex.php(またはマッピングする場所)で指定されたルーティングと一致することを確認してください。「ストア」 >「すべてのストア」の下の管理者チェックで。ウェブサイトを確認し、ストアコードを保存および保存します。

Magentoが入力した店舗コードを切り捨て、マッピングで同じ調整を行ったことに気付き、すべてが再び機能し始めました。

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