SQL-Fehler beim programmgesteuerten Hinzufügen eines Bildes zum Produkt


7

Ich aktualisiere Produkte programmgesteuert und füge ihnen dann Bilder hinzu über

$ product-> addImageToMediaGallery ($ file, array (<flags>), true, false);

Für einige Produkte funktioniert das einwandfrei, für andere gibt es mir

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db11057204-walthermagestaging`.`catalog_product_entity_media_gallery_value`, CONSTRAINT `FK_CAT_PRD_ENTT_MDA_GLR_VAL_VAL_ID_CAT_PRD_ENTT_MDA_GLR_VAL_ID` FOREIGN KEY (`value_id`) REFERENCES `c), query was: INSERT INTO `catalog_product_entity_media_gallery_value` (`value_id`, `store_id`, `label`, `position`, `disabled`) VALUES (?, ?, ?, ?, ?)

Ich konnte noch kein Muster bestimmen.

Es heißt, dass eine Fremdschlüsseleinschränkung fehlschlägt, aber in der Fehlermeldung wird das Ziel der FK nach dem ersten Buchstaben abgeschnitten, was mich ahnungslos macht. Wo soll man suchen? Was ist zu tun?

BEARBEITEN

media_galleryKönnte es sein, dass es kein eav-Attribut gibt, da diese Produkte automatisch erstellt werden? Wenn ja, wie kann ich das überprüfen?


stackoverflow.com/questions/8456954/… überprüfen Sie diese Antwort vielleicht hilft es ..
Qaisar Satti

@QaisarSatti uhhh, ist das nicht genau das, was ich tue?
Yorrd

Welche Magento-Version?
Philwinkle

@philwinkle 1.9.1.1
Yorrd

Antworten:


4

Ich habe das schon einmal gesehen und es war das Ergebnis des Schreibens von Code wie folgt:

Defekter Code wird nicht ausgeführt:

<?php

$collection = Mage::getModel('catalog/product')->getCollection();
foreach($collection as $product){
    $product->addImageToMediaGallery($file, array( < flags > ), true, false);
    $product->save();
}

Lösung

Dies führt nicht nur zum Laden und Sperren, sondern die Bildergalerie wird auch nicht in die Sammlung geladen, wodurch Fremdschlüsseleinschränkungen fehlschlagen.

Anstatt in der Schleife zu speichern, kann Ihr Skript das Admin-Panel emulieren, sodass Sie Sammlungen speichern können. Außerdem möchten Sie die Mediengalerie zu Ihrer Sammlung hinzufügen:

<?php

require('app/Mage.php');
umask(0);
Mage::setIsDeveloperMode(true);
Mage::app();
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect(array('image', 'media_gallery'));

foreach($collection as $product){
    $product->addImageToMediaGallery($file, array( < flags > ), true, false);
}
$collection->save();

1
Ich lade das Produkt mit einem Modell, dies sollte alle Attribute laden, nicht wahr?
Yorrd

Ok, was ich getan habe, ist nur das Produkt neu zu laden, das wird anscheinend alles laden. Ich werde Ihre immer noch als akzeptiert markieren, Sie haben das Problem erklärt.
Yorrd

Das Laden des Produkts in eine Schleife und das anschließende Speichern führt zweifellos zu Deadlocks, je mehr es save () aufruft. Ich bin froh, etwas Hilfe gewesen zu sein!
Philwinkle

0

Ich hatte diese Fehlermeldung, als zwei Produktbilder den gleichen Dateinamen hatten. Ich importiere Produkte über Magmi, und wenn der Administrator versucht, das Produkt nach einer Bearbeitung zu speichern, wird das Bild entfernt. Die Problemumgehung besteht darin, das Produktbild umzubenennen oder das Bild manuell über das Admin-Panel hochzuladen. Das Admin-Panel benennt die Namen um und behandelt sie korrekt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.