価格設定のある Magento Enterprise 1.8 のスクリプトから製品モデルを保存しようとすると、奇妙な動作が発生します。
たとえば、次のコードをご覧ください。
// This product has a tier price
$product = Mage::getModel('catalog/product')->load(194760);
$product->setName('Changed Product Title');
$product->save();
保存時に例外が発生します (詳細は後述)。ただし、モデルで何も変更しない場合、例外は発生しません。これは、何も更新しなかったため、Magento がそれほど多くの作業を行っていないことが原因であると感じています。
// Same product, but I changed nothing and it works
$product = Mage::getModel('catalog/product')->load(194760);
$product->save();
奇妙な部分は、階層価格情報を設定または変更している場合に製品を正常に保存できることです (重複するものは作成しないでください)。
// This works pending the tier price does not already exist
$mud_array = array();
$mud_array[] = array(
'website_id' => 0,
'cust_group' => 32000,
'price_qty' => 5,
'price' => 6
);
$product = Mage::getModel('catalog/product')->load(194760);
$product->setTierPrice($mud_array);
$product->save();
私が見ている例外は次のとおりです。
致命的なエラー: キャッチされない例外 'Mage_Eav_Model_Entity_Attribute_Exception' とメッセージ 'SQLSTATE[23000]: 整合性制約違反: 1062 /path/to/magento/app/ のキー 'UNQ_CATALOG_PRODUCT_TIER_PRICE'' のエントリ '194760-1-0-5.0000-0' が重複していますコード/コア/メイジ/Eav/モデル/エンティティ/Abstract.php:61
そのため、ティア価格が製品に存在し、モデル内で何かを変更しようとすると、すべてのティア価格情報を再挿入しようとするようです。
誰もこれを見たことがありますか?これを回避する方法はありますか? ご協力いただきありがとうございます。