2012-04-06 42 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

相关问题