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_id 和stock_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。
我写了一些代码,将库存数据添加到产品中。它在我的测试数据库上运行良好。现在我开始在客户数据库上测试代码,出现了这个错误:
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_id 和stock_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。