我写了一些代码,将库存数据添加到产品中。它在我的测试数据库上正常运行。现在我开始在客户数据库上测试代码并出现此错误:
SQLSTATE [23000]:完整性约束违规:1062重复条目 关键字'449-1' 'UNQ_MAGENTO_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID',查询 是: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();
没有股票代码,可以保存产品。我检查了我的数据库导入文件,并在其中进行了forgeign密钥检查,因此无法解决问题。我正在运行Magento 1.9。
有什么想法吗?
谢谢!
答案 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并获得该特定产品的重复条目标识。