Magento 2-Neuindex gibt keine solche Entität zurück

14

Ich habe den Katalog erfolgreich von Magento 1.9.2.3 auf Magento 2.0.2 migriert. Nach der Migration habe ich den Befehl erneut indiziert php bin/magento indexer:reindex.

Alles wird erfolgreich neu indiziert, mit Ausnahme der Indizes catalog_category_productund catalog_product_category, die No such entity.in der Shell und Benachrichtigung Reindex Requiredin admin zurückkehren. Ich habe var/log/aber keine Fehler geprüft .

Infolgedessen werden Produkte zu Kategorien im Backend hinzugefügt, aber die Kategorien werden im Frontend leer angezeigt.

Was könnte dieses Problem verursachen? Wie kann ich debuggen?

Gerard de Visser
quelle
Im Grunde das gleiche magento.stackexchange.com/questions/102739/…
Patrick-Peng

Antworten:

7

Zusätzlich zu Raphael:

Ich habe diesen Code mit einer Änderung des Exception-Konstruktors für Debug-Zwecke (entweder durch xdebug oder alte Dumps) getestet. Ändern Sie vorerst das Konstrukt der Ausnahme (die Datei ist \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php)

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

Gehen Sie danach einen Stapel hoch und überprüfen Sie die angegebenen Argumente (die Argumente sind auch im Debug-Backtrace verfügbar, aber das Ablegen von Magento-Objekten ist nicht wirklich browserfreundlich).

Kam zu dem Schluss, dass es sich um den Ort handelte, an dem storeGroupRepositorydie Gruppen-ID nicht gefunden wurde. Tauchte in die Filialtabellen ein und sah einige Zeilen in der Filialtabelle, die auf eine referenzierten store_group, die nicht in der store_groupTabelle enthalten war ( Filialgruppe in relevanter Tabelle nicht vorhanden).

Die fehlerhaften Geschäftszeilen wurden entfernt und der Fehler ist seitdem verschwunden.

Beachten Sie jedoch, dass es sich auch um eine andere Tabelle oder einen anderen Grund handeln kann. Zum Beispiel Website, Speicher selbst oder Speichergruppe in diesem Fall. Das ist also immer eine kleine Suche, die Sie selbst durchführen müssen.

Fand auch heraus, dass es ziemlich viele Verweise auf diese Läden gab und entfernte sie auch manuell in der Datenbank. Dies kann eine mühsame Arbeit sein, aber es wird das Problem lösen.

Und vergessen Sie nicht, Ihre Hacks zu entfernen.

TimVroom
quelle
warum benutzt du nicht stattdessen xdebug?
Luke
@ TimVroom Ich habe auch den gleichen Fehler.Bitte helfen Sie mir magento.stackexchange.com/q/236187/24878
akgola
10

Ich bin mir nicht sicher, ob dies zu spät zum Hinzufügen ist, aber als ich dies hatte, schien es durch einige Entitäts-IDs verursacht zu sein, die auf 0 gesetzt werden mussten.

Dieses Skript hat bei mir funktioniert:

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;

Ich hoffe es hilft.

Adam Stacey
quelle
das hat mir sehr geholfen, danke fürs teilen!
Favoriten
Das hat auch bei mir funktioniert :)
Owen
3

Ok also die No such entity.Fehlermeldung kommt von \lib\internal\Magento\Framework\Exception\NoSuchEntityException.php.

Diese Klasse ist eine benutzerdefinierte Ausnahmeklasse von Magento und wird in Magento 2 häufig verwendet.

Wann immer Sie Code sehen wie:

catch (NoSuchEntityException $e)

Oder

throw NoSuchEntityException;

Diese Klasse wird verwendet.

Das Problem in Ihrem Fall ist, dass es schwierig ist herauszufinden, wo diese Ausnahme ausgelöst wird.

Um es ein wenig einzugrenzen, können Sie mit dem Debuggen der beiden Klassen beginnen, die sich auf Ihre fehlgeschlagenen Indizes beziehen:

  • Magento\Catalog\Model\Indexer\Category\Product=> catalog_category_product index
  • Magento\Catalog\Model\Indexer\Product\Category=> catalog_product_category index

Glücklicherweise erweitert der zweite den ersten, sodass Sie einen Ausgangspunkt haben.

Beachten Sie, dass jede dieser Indexer-Klassen Aktionszeilenklassen verwendet, um die Neuindizierung zu verarbeiten:

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

Hier sollten Sie mit dem Debuggen beginnen, da diese Aktionszeilenklassen die direkten Klassen sind, die diese beiden Indizes neu indizieren.

Ich hoffe wirklich, dass es Ihnen helfen wird, Ihr Problem zu finden.

Raphael beim digitalen Pianismus
quelle
Hallo @Raphael, ich habe ein ähnliches Problem bei der Kundenerstellung nach der Migration. Bitte
akgola
0

Das hat für mich funktioniert, nachdem ich alles versucht hatte.

Angenommen, Ihre Site befindet sich in Developer Mode, können Sie sie in den Production ModeCache ändern, ihn leeren / leeren und dann wieder in den Cache wechseln Developer Mode.

Ich hatte dieses Problem im Front-End, als ich kürzlich die Datenbank von einem Server auf einen anderen verschoben habe. Ich habe es geschafft, auf diese Weise zu lösen.

HOFFNUNG, DAS HILFT EINEM.

Thowzif
quelle
0

Im Grunde das gleiche

Magento 2 - Moving Site - 'Keine solche Einheit'

cd /magento-root-path/var

rm -rf *

cd ../

php bin/magento setup:upgrade

rm -rf ./var/di

php bin/magento setup:di:compile

php bin/magento setup:static-content:deploy

chown -R www-data .

Patrick-Peng
quelle
0

Dieser Fehler betraf in meinem Fall ein Setup für mehrere Geschäfte und Domänen. Magento schneidet Geschäftscodes ab. Wenn Sie Domains zu Geschäftscodes zuordnen, vergewissern Sie sich, dass der Geschäftscode mit dem in index.php angegebenen Routing übereinstimmt (oder wo immer Sie ihn zuordnen). Im Admin Check unter "Stores" > " All Stores ". Überprüfen Sie Ihre Website, Store & Store View Store-Codes.

Sobald ich feststellte, dass Magento den von mir eingegebenen Geschäftscode abgeschnitten und die gleiche Anpassung im Mapping vorgenommen hatte, fing alles wieder an zu funktionieren.

Taylor Hunt
quelle