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

时间:2015-03-24 12:45:03

标签: magento

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

  

SQLSTATE [23000]:完整性约束违规:1062重复条目   关键字'449-1'   'UNQ_MAGENTO_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID',查询   是:INSERT INTO magento_cataloginventory_stock_itemproduct_id,   stock_idqtymin_sale_qtyuse_config_min_sale_qty,   max_sale_qtyuse_config_max_sale_qtyis_in_stock,   low_stock_datemanage_stockuse_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();

没有股票代码,可以保存产品。我检查了我的数据库导入文件,并在其中进行了forgeign密钥检查,因此无法解决问题。我正在运行Magento 1.9。

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

使用此查询:

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

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

答案 2 :(得分:0)

我使用了这个查询:

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

它对我有用。

答案 3 :(得分:0)

如果显示表'cataloginventory_stock_item' having 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID' index,的错误

然后请确保您每次都从脚本中传递不同的产品SKU。因为如果您通过相同的SKU,它将根据该SKU获取产品的ID并获得该特定产品的重复条目标识。