17

在创建产品时,在检索一段时间后的最后一步,Magento 给出以下错误:

SQLSTATE [23000]:违反完整性约束:1062 键 'IDX_STOCK_PRODUCT' 的重复条目 '1922-1'

我正在做的是,通过捕获产品 ID,我将它的条目放入自定义表中。我已从外部连接到 Magento 数据库。

令人惊讶的是,数据被插入到 Magento 的基表和自定义表中,但为什么它在产品保存后给我这个错误......?

我清除了缓存、浏览器 cookie。同时删除 /var/cache、/var/session。仍然给出错误。有人可以提出解决方案吗?

4

7 回答 7

16

该消息意味着您正在使用属于 IDX_STOCK_PRODUCT 的相同列组合进行另一次插入,这些列组合被定义为 UNIQUE。如果是这样,它不允许输入相同的组合(它似乎由两个字段组成)两次。

如果您要插入记录,请确保您选择的是全新的记录 ID,或者记录 ID 和另一列的组合是唯一的。

如果没有详细的表结构和您的代码,我们几乎无法猜测出了什么问题。

于 2012-04-06T13:39:48.257 回答
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()

于 2014-05-09T13:16:11.633 回答
1

您可能忘记了自动增加 id 字段。

于 2012-12-29T16:01:33.797 回答
1

我也遇到了这个问题。我发现将表存储引擎从 MyISAM 更改为 Innodb 后,问题解决了。

于 2019-08-19T02:43:11.253 回答
0

您的列值已经在数据库表中,这意味着您的表列是唯一的,您应该更改值并重试

于 2018-09-17T07:45:31.713 回答
-1

尝试将 FK 更改为 INDEX 而不是 UNIQUE。

于 2014-05-19T14:35:35.440 回答
-5

我刚刚添加了一个 @ 符号,它就开始工作了。像这样:@$product->save();

于 2016-06-01T14:22:54.530 回答