Frage

Ich habe meiner lokalen Site einige Bilder hinzugefügt, und danach habe ich bei der Produktdetail -Seite die Magento -Fehlerseite angegeben, dass eine Fehlerverarbeitung Ihrer Anforderung und keine Bilddatei gefunden wurde. Danach heißt es in den Produkten für Produkt flache Daten, dass sie neu integriert werden müssen, aber wenn ich versuche, sie erneut zu indem zu integrieren, gab es ein Problem mit dem Reindedexing-Prozess. Ich gehe davon aus, dass die Bilder mit dem Problem zusammenhängen, da es vorher keine Reindexing benötigte. Ich habe das Produkt gelöscht, für das ich Bilder hochgeladen hatte, den Cache gelöscht und die Sperrdateien gelöscht hatte, wie es in einem anderen Beitrag vorgeschlagen wurde, der diesem ähnlich war, den ich gefunden habe. Kann jemand weitere Maßnahmen vorschlagen, die ich ergreifen kann, um dies zu debuggen?

<--- Weitere Details ---> Ich habe die Reindedex-Datei in der Konsole ausgeführt und sie gab den folgenden Fehler zurück

   Product Flat Data index process unknown error:
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`startlondon_live`.`#sql-448_15e`, CONSTRAINT `FK_MAG_MAG_CAT_PRD_FLAT_1_ENTT_ID_MAG_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `mag_catalog_product_entity` (`entity_id`) ON DE)' in /home/start-london/public_html/lib/Zend/Db/Statement/Pdo.php:228

Das einzige, was ich mir vorstellen konnte, war, ausländische Schlüsselbeschränkungen in der Datenbank auszuschalten, aber dies half nicht

War es hilfreich?

Lösung

Ich hoffe, ich habe das Problem verstanden: und die Frage ...

Dieser Teil der Fehlermeldung zeigt:

startlondon_live`.`#sql-448_15e`, CONSTRAINT `FK_MAG_MAG_CAT_PRD_FLAT_1_ENTT_ID_MAG_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `mag_catalog_product_entity` (`entity_id`)...

Was das sagt mir, dass die Kolumne startlondon_live verweist auf eine Katalog -Produktentitäts -ID -Spalte (Spaltemag_catalog_product_entity) auf dem Entitätsfeld aber Dieser Eintrag oder Feld existiert nicht mehr. Der Name des Fremdschlüssels ist nicht formatiert, wie der Magento -Installateur ihn benennen würde, so dass es mir sagt, dass es individuell ist.

Im Wesentlichen fehlschlägt die Einschränkung, die Sie aus einer anderen Tabelle erstellt haben, im Indexer, da die Zielspalte entweder nicht mehr vorhanden oder gelöscht wird und das Kind verwandelt wird.

Dies bringt mich zu ein paar Gedanken:

  • Beim Erstellen neuer Felder in benutzerdefinierten Ressourcenmodellen oder zum Erweitern des Magento -Katalogs ist dies der Fall unnötig, um flache Tische zu ändern.
  • Es kann auch unnötig sein, fremde Schlüsselbeziehungen zu entity_ids auf flachen Tabellen aufzubauen. FK -Beziehungen erzwingen das Schema und verhindern Datenfehler oder verwaiste Inhalt, aber im Herzen von Magento bemüht sich EAV nicht, dieses Schema durchzusetzen. Flache Tische werden im Fliege gebaut und Attribute, die sich als Frontend-Attribute aussetzen, erstellen automatisch die erforderlichen Spalten für die flachen Tabellen.
  • In dem Fall, dass dies ein benutzerdefiniertes Ressourcenmodell ist, benötigen Sie keine FK -Beziehung zur flachen Tabelle - stattdessen erstellen Sie die FK -Beziehung zum catalog_product_entity Tisch; Immerhin ist das die Einheit der Aufzeichnung in Magento für ein Produkt. Möglicherweise definieren Sie Ihre Regeln für Löschen.

Am Ende müssen Sie diesen Fehler beheben. Das Deaktivieren von Fremdschlüsselprüfungen ist ein Rezept für eine Katastrophe.

Stattdessen, Entfernen Sie Ihre Schema -Änderungen von Magento DB. Deaktivieren/Aktivieren Sie flacher Katalog - oder in der Worst-Case-Szenario Lass deine fallen catalog_product_flat* Tische und bauen Sie sie wieder auf.

Andere Tipps

Das reparieren

Um dieses Problem zu beheben, müssen Sie herausfinden, was die beschädigten Einträge sind. Das ist einfach. In diesem Fall müssen Sie eine Abfrage erstellen, um die leeren Register zu erhalten:

SELECT a.entity_id FROM catalog_product_flat_2 AS a LEFT JOIN catalog_product_entity AS b ON a.entity_id = b.entity_id WHERE ISNULL(b.entity_id);

Dadurch werden die beschädigten Einheiten angezeigt. Sie müssen sie nur löschen und das ist alles.

+-----------+
| entity_id |
+-----------+
|     35427 |
|     35428 |
+-----------+
2 rows in set (0.04 sec)

Zum Beispiel:

DELETE FROM catalog_product_flat_2 where entity_id = '35427';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top