2012-01-09 101 views
0

我有下面的代碼將CSV列表從舊值更新爲新值。然而,它觸發了部分產品的錯誤:從Magento中的CSV更新SKU - 完整性約束違規:1062錯誤

無法檢索產品的Magento:SQLSTATE [23000]:完整性約束違規:1062重複項 '168-122-1-7' 關鍵1

include_once '../app/Mage.php'; 
    Mage::app(); 

    $updates_file="/home/varsityk/public_html/csvs/sku2sku.csv"; 

    $sku_entry=array(); 

    $updates_handle=fopen($updates_file, 'r'); 
    if($updates_handle) { 
     while($sku_entry=fgetcsv($updates_handle, 1000, ",")) { 
      $old_sku=$sku_entry[0]; 
      $new_sku=$sku_entry[1]; 
      echo "<br>Updating ".$old_sku." to ".$new_sku." - "; 
      try { 
       $get_item = Mage::getModel('catalog/product')->loadByAttribute('sku', $old_sku); 

       if ($get_item) { 
        $get_item->setSku($new_sku)->save(); 
        echo "successful"; 
       } else { 
        echo "item not found"; 
       } 
      } catch (Exception $e) { 
       echo "Cannot retrieve products from Magento: ".$e->getMessage()."<br>"; 
       return; 
      } 
     } 
    } 

    fclose($updates_handle); 

回答

1

有沒有足夠的信息,在您的文章準確地跟蹤下來。當您在Magento中保存產品信息時,有多個表的信息需要更新。其中一個表有,出於某種原因,您的系統正在嘗試向信息更新,將導致四列在該鍵是另一行的重複

Integrity constraint violation: 1062 Duplicate entry '168-122-1-7' for key 1 

你需要一個四柱唯一鍵弄清楚這是哪張表,然後弄清楚爲什麼Magento可能會在這次更新中獲益。要做到這一點,最快捷的方法是添加一些希望

lib/Zend/Db/Adapter/Abstract.php 

這是大多數數據庫查詢在Magento通過路由類。將您的記錄添加到updateinsert方法中。尋找其中的SQL字符串創建

$sql = "UPDATE " 
     . $this->quoteIdentifier($table, true) 
     . ' SET ' . implode(', ', $set) 
     . (($where) ? " WHERE $where" : ''); 


    $sql = "INSERT INTO " 
     . $this->quoteIdentifier($table, true) 
     . ' (' . implode(', ', $cols) . ') ' 
     . 'VALUES (' . implode(', ', $vals) . ')'; 

有了這個記錄在地方現場,你就會知道最後一個表的Magento試圖插入或更新拋出該異常,這應該給你你需要的信息之前,排除故障。

+0

您好,感謝我的錯誤是: 無法檢索產品的Magento:SQLSTATE [23000]:完整性約束違規:1452不能添加或更新子行,外鍵約束失敗('mysite的/ mg_catalog_product_entity', CONSTRAINT'FK_CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID' FOREIGN KEY('attribute_set_id')REFERENCES'mg_eav_attribute_set'('attribute_set_id')ON) – user398894 2012-01-10 10:29:27

相關問題