2012-04-06 99 views
11

在檢索了一段時間後,創造的產品,在最後一步,Magento的給出以下無差錯:SQLSTATE [23000]:完整性約束衝突:關鍵「IDX_STOCK_PRODUCT」 1062重複項「1922-1」

SQLSTATE [23000]:完整性約束違規:1062重複項「1922-1」關鍵「IDX_STOCK_PRODUCT」

什麼我做的是,通過捕捉產品ID,我把它在定製的表項。我已經從外部連接到Magento數據庫。

令人驚訝的數據插入到Magento的基表&也在自定義表中,但爲什麼它在產品保存後給我這個錯誤......?

我清除了緩存,瀏覽器cookies。 還要刪除/ var/cache,/ var/session。 仍然出錯。 任何人都可以提出解決方案嗎?

+0

此錯誤表示您在同一個表中使用兩次相同的主鍵值。在'IDX_STOCK_PRODUCT'中已經有一個ID爲'1922-1'的產品,並且一個查詢試圖再次使用該ID保存一條新記錄。 – mrlee 2012-04-06 13:31:27

+0

那麼解決方案是什麼? – Prat 2012-04-06 13:35:07

+0

基本上,不要用重複的ID保存數據。如果沒有任何與此錯誤相關的代碼示例,那是您將要獲得的最佳解決方案。 – mrlee 2012-04-06 13:42:12

回答

11

該消息表示您正在使用屬於IDX_STOCK_PRODUCT一部分的列的相同組合進行另一次插入,該接口將被定義爲UNIQUE。如果是這樣,它不允許兩次輸入相同的組合(它看起來像是由兩個字段組成)。

如果您要插入記錄,請確保您正在挑選全新的記錄ID,或者記錄ID與另一列的組合是唯一的。

沒有詳細的表格結構和你的代碼,我們很難猜到發生了什麼問題。

+0

你是對的Radek,我在我的自定義表中提取SKU&entity_id。在我的自定義表格中,我只有4列 - 第號,entity_id,SKU和時間戳....我應該在該表中放置什麼約束? – Prat 2012-04-06 13:43:26

1

您可能忘記了自動增加id字段。

+0

在這種情況下,鍵是一個複合鍵,所以自動遞增與它無關。 – PanPipes 2016-08-24 08:26:48

3

很多時候,當您更新自定義模塊的觀察者中的產品時會導致此錯誤,如下所示。

class [NAMESPACE]_[MODULE NAME]_Model_Observer 
{ 
    /** 
    * Flag to stop observer executing more than once 
    * 
    * @var static bool 
    */ 
    static protected $_singletonFlag = false; 

    public function saveProductData(Varien_Event_Observer $observer) 
    { 
     if (!self::$_singletonFlag) { 
      self::$_singletonFlag = true; 

      $product = $observer->getEvent()->getProduct(); 
      //do stuff to the $product object 
      // $product->save(); // commenting out this line prevents the error 
      $product->getResource()->save($product); 
    } 
} 

因此每次保存您的產品在更新你的模塊觀察者的某些屬性使用$product->getResource()->save($product)代替$product->save()

-1

嘗試將FK更改爲索引而不是UNIQUE後。

-4

我剛剛添加了@符號,它開始工作。像這樣:@$product->save();

+1

'@'的使用是一個不良的做法,必須不惜一切代價避免! – 2016-08-09 10:45:01

+1

由於Victor說@應該避免錯誤信息,因此應避免使用@。詳細信息可以在[PHP錯誤控制](http://php.net/manual/en/language.operators.errorcontrol.php)中找到。 – PanPipes 2016-08-25 09:47:05