アイテムを構成可能なアイテムとして Magento にインポートしています。ストックアイテムを作成しているときはすべて問題ありませんが、アイテムが更新されているときに次のエラーが発生します。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '315-315' for key 'UNQ_TEST1_CATALOG_PRODUCT_SUPER_LINK_PRODUCT_ID_PARENT_ID'
私が使用しているコードブロックは次のとおりです。
//Try and open for edit.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $stockCode);
//Fetch data from XML and update stock item.
$productData = $this->getProductDataArray($stockItem, $stockCategoryList);
$this->saveStockItem($stockItem, $product, 'configurable', $setId, $productData);
//Reopen the stock item to get any changes.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $stockCode);
//Build a list of existing attributes for this config product so we can check existing attributes etc.
$existingConfigAttributes = $this->getExistingConfigurableAttributes($product);
$configurableProductsData = $this->getConfigurableProductData($product, $existingConfigAttributes);
$configurableAttributesData = $this->getConfigurableAttributeProductData($product, $existingConfigAttributes);
//Set the configurable attribute information
if ($configurableProductsData != null)
$product->setConfigurableProductsData($configurableProductsData);
if ($configurableAttributesData != null)
$product->setConfigurableAttributesData($configurableAttributesData);
$product->setCanSaveConfigurableAttributes(1);
$product->save();
すべてが最初から正常に機能しており、構成可能な項目は期待どおりに機能しています。ただし、もう一度実行すると、$product->save();
. これを既存のアイテムではなく新しいアイテムとして処理しようとしていると想定しているため、挿入すべきでない場所に挿入しようとしています。
$this->saveStockItem()
内容:
$stockCode = (string)$stockItem->STOCK_CODE;
if ($product)
{
$productId = $product->getId();
}
$mc = new Mage_Catalog_Model_Product_Api();
if ($this->validId($productId))
{
$mc->update($productId, $productData);
return $productId;
}
else
{
return $mc->create($type, $setId, $stockCode, $productData);
}
このようなアイテムを更新できることはわかっていますが、構成可能なアイテムに追加する必要がある追加の属性は更新されません。
この情報を更新する正しい方法は何ですか?