Domanda

ho aggiunto alcune immagini al mio sito locale e dopo questo quando si va alla pagina di dettaglio del prodotto ho ottenuto la pagina di errore Magento dicendo che si è verificato un errore durante l'elaborazione della richiesta e il file immagine non è stata trovata. Dopo questo il dato prodotto piano dice che ha bisogno di essere ri-indicizzato, ma quando provo a ri-index, è dice che c'era un problema con il processo di reindicizzazione. Presumo le immagini sono correlate al problema in quanto non ha bisogno reindicizzazione prima di questo. Ho cancellato il prodotto che avevo caricato immagini per, ho cancellato la cache e cancellato i file di blocco come era stato suggerito in un altro post simile a questo che ho trovato. Qualcuno può suggerire eventuali ulteriori azioni che posso prendere per eseguire il debug di questo.

<--- ULTERIORI DETTAGLI ---> Ho eseguito il file Reindicizza nella console e ha restituito il seguente errore

   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

L'unica cosa che riuscivo a pensare era di spegnere vincoli di chiave esterna nel database, ma questo non ha aiutato

È stato utile?

Soluzione

Nella speranza ho capito il problema a portata di mano: e la questione ...

Questa parte del messaggio di errore è eloquente:

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`)...

Quello che mi sta dicendo è che il startlondon_live colonna fa riferimento una colonna un'entità ID prodotto catalogo (mag_catalog_product_entity) sul campo di entità, ma che l'ingresso o il campo non esiste più . Il nome della chiave esterna non è formattato come il programma di installazione di Magento sarebbe un nome, in modo che mi dice che è personalizzato.

In sostanza il vincolo che hai creato da un altro tavolo sta fallendo nel indicizzatore perché la colonna di destinazione o non esiste più o sarà cancellato, il bambino orfano.

Questo mi porta ad alcune riflessioni:

  • Durante la creazione di nuovi campi in entrambi i modelli di risorse personalizzato o di estendere il catalogo Magento è necessario modificare le tabelle piatte .
  • Può anche essere necessario creare relazioni di chiave esterna per di ENTITY_ID su tavole piatte. relazioni FK rispettare schema e prevenire errori di dati o contenuti orfani ma, nel cuore di Magento, EAV fa alcuno sforzo per far rispettare questo schema. tavoli piatti sono costruiti on-the-fly e attributi che esporsi come attributi frontend automagicamente creare colonne necessarie per i tavoli piatti.
  • Nel caso in cui questo è un modello di risorse personalizzato non è necessario avere un rapporto FK al tavolo piatta - invece creare la relazione FK al tavolo catalog_product_entity; dopo tutto, questo è l'entità del record di Magento per un prodotto. Si può ancora definire le regole di eliminazione ON.

Alla fine è necessario correggere questo errore. La disattivazione di controlli chiave esterna è una ricetta per il disastro .

Invece, rimuovere lo schema modifiche da Magento DB. Disabilitare / abilitare catalogo piatta - o nel scenario peggiore eliminare le tabelle catalog_product_flat* e ricostruirli

.

Altri suggerimenti

Risoluzione di questo

Al fine di risolvere questo problema, è necessario trovare quali sono le voci danneggiate sono. Questo è facile. In questo caso, è necessario creare una query per ottenere i registri vuoti:

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);

Questo mostrerà i soggetti danneggiati. Hai solo bisogno di eliminarli e questo è tutto.

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

A titolo di esempio:

DELETE FROM catalog_product_flat_2 where entity_id = '35427';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top