在创建产品时,在检索一段时间后的最后一步,Magento会出现以下错误 - :
SQLSTATE [23000]:完整性约束违规:1062密钥'IDX_STOCK_PRODUCT'的重复条目'1922-1'
我正在做的是,通过捕获产品ID,我将它放入自定义表中。我已从外部连接到Magento数据库。
令人惊讶的是,数据被插入到Magento的基表和数据库中。也在自定义表中,但为什么它在产品保存后给我这个错误...?
我清除了缓存,浏览器Cookie。 同时删除/ var / cache,/ var / session。 仍然给出错误。 有人可以提出解决方案吗?
答案 0 :(得分:12)
该消息表示您正在使用属于IDX_STOCK_PRODUCT的相同列组合执行另一个插入,这些列将被定义为UNIQUE。如果是这样,则不允许两次输入相同的组合(看起来它包含两个字段)。
如果要插入记录,请确保选择全新的记录ID,或者记录ID和其他列的组合是唯一的。
如果没有详细的表格结构和代码,我们很难猜到什么是错误的。
答案 1 :(得分: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()
答案 2 :(得分:1)
您可能忘记自动增加ID字段。
答案 3 :(得分:0)
您的列值已经在数据库表中 这意味着您的表列是唯一的 你应该改变你的价值 然后重试
答案 4 :(得分:0)
我也遇到了这个问题。 将表存储引擎从MyISAM更改为Innodb后,我发现问题已解决。
答案 5 :(得分:-1)
尝试将FK更改为INDEX而不是UNIQUE。
答案 6 :(得分:-4)
我刚刚添加了一个@符号,它开始工作了。像这样:@$product->save();