プログラムで画像を製品に追加するときのSQLエラー


7

プログラムで製品を更新してから、それらに画像を追加する

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

一部の製品ではこれで十分に機能し、他の製品ではそれが私に与える

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 (?, ?, ?, ?, ?)

まだパターンを決定できていません。

外部キー制約が失敗することを示していますが、エラーメッセージでは、FKのターゲットが最初の文字の後に切り取られているため、手がかりがありません。どこを見ますか?何をすべきか?

編集

これらの製品は自動的に作成されるため、media_galleryeav属性がない可能性がありますか?もしそうなら、どうすれば確認できますか?


stackoverflow.com/questions/8456954/... 多分それ助け...この答えをチェック
Qaisar Satti

@QaisarSattiええと、これはまさに私がやっていることではありませんか?
Yorrd

Magentoのバージョンは何ですか?
philwinkle

@philwinkle 1.9.1.1
Yorrd

回答:


4

私はこれを以前に見たことがありますが、それは次のようなコードを書いた結果です:

壊れたコードは実行されません:

<?php

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

解決

これにより、ロードとロックが発生するだけでなく、画像ギャラリーがコレクションにロードされないため、外部キー制約が失敗します。

ループで保存する代わりに、スクリプトで管理パネルをエミュレートして、コレクションを保存できます。また、メディアギャラリーをコレクションに追加することもできます。

<?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
モデルとともに製品をロードしていますが、これはすべての属性をロードするはずですよね。
Yorrd

わかりましたので、私がやったことは単に製品をリロードすることです、それは明らかにすべてをロードします。私はあなたを受け入れたものとしてマークします、あなたは問題を説明しました。
Yorrd

製品をループでロードしてから保存すると、save()を呼び出すほどデッドロックが発生します。でも、助けになってよかったです!
philwinkle

0

2つの製品画像のファイル名が同じである場合、このエラーメッセージが表示されました。私はmagmi経由で製品をインポートし、管理者が編集後に製品を保存しようとすると、画像が削除されます。回避策は、製品の画像の名前を変更するか、管理パネルを介して手動で画像をアップロードすることです。管理パネルは、名前を変更して名前を正しく処理します。

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