Magento Integrity 约束违规:1062 保存库存项目时出现重复输入错误?

Magento Integrity constraint violation: 1062 Duplicate entry error when saving stock item?

我写了一些代码,将库存数据添加到产品中。它在我的测试数据库上运行良好。现在我开始在客户数据库上测试代码,出现了这个错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '449-1' for key 'UNQ_MAGENTO_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID', query was: INSERT INTO magento_cataloginventory_stock_item (product_id, stock_id, qty, min_sale_qty, use_config_min_sale_qty, max_sale_qty, use_config_max_sale_qty, is_in_stock, low_stock_date, manage_stock, use_config_manage_stock, stock_status_changed_auto) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

这是代码:

$product->setStockData(array(
                                       'use_config_manage_stock' => 0, //'Use config settings' checkbox
                                       'manage_stock' => 1, //manage stock
                                       'min_sale_qty' => 1, //Minimum Qty Allowed in Shopping Cart
                                       'max_sale_qty' => 999, //Maximum Qty Allowed in Shopping Cart
                                       'is_in_stock' => 1, //Stock Availability
                                       'qty' => 999 //qty
                                   )
                               );

当我像这样保存产品时出现错误:

$product->save();

没有库存代码,产品可以保存。我检查了我拥有的数据库导入文件,其中包含外键检查,所以这不是问题所在。我是 运行 Magento 1.9.

有什么想法吗?

谢谢!

cataloginventory_stock_item table 有一个多列唯一键,由 product_idstock_id。显然它被命名为:UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID 并且您通过插入重复记录违反了它:product_id=449 并且stock_id=1.

确保您在新记录中没有违反此规则。

无论如何,您也可以尝试将:$product->save(); 替换为:$product->getResource()->save($product);(按照建议 here

使用这个查询:

delete FROM cataloginventory_stock_item 
where product_id not in(SELECT entity_id FROM catalog_product_entity);

这将移除已移除产品的库存。

我使用了这个查询:

delete FROM cataloginventory_stock_item 
where product_id not in(SELECT entity_id FROM catalog_product_entity);

它对我有用。

如果显示 table 'cataloginventory_stock_item' having 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID' index,

的错误

然后请确保您从脚本中每次传递不同的产品 SKU time.because 如果您传递相同的 SKU,那么它将根据该 SKU 获取产品 ID 并获取重复条目该特定产品 ID。