我正在尝试使用 Mage 更新 Magento 中的客户组价格(因为我无法在 SOAP V2 API 中找到执行此操作的方法)。我找到了一个 StackOverflow 示例,但它对我不起作用。我使用的代码如下:
<?php
include_once '../App/Mage.php';
Mage::app();
$productID = $_GET["id"];
$product = Mage::getModel('catalog/product')->load($productID);
$groupPricingData = array(array('price_id'=>1,'website_id'=>0,
'cust_group'=>3, 'price'=>666));
$product->setData('group_price',$groupPricingData);
$product->save();
echo "true";
?>
如果我使用已设置任何客户价格的产品,我会收到以下错误。如果我尝试没有现有价格的产品,它不会出错,但不会创建客户组价格。
SCREAM: Error suppression ignored for
( ! ) Fatal error: Uncaught exception 'Mage_Eav_Model_Entity_Attribute_Exception' with
message 'SQLSTATE[23000]: Integrity constraint violation: 1062
Duplicate entry '24-0-3-0' for key 'CC12C83765B562314470A24F2BDD0F36'' in
C:\wamp\www\magento\app\code\core\Mage\Core\Model\Config.php on line 1348
( ! ) Mage_Eav_Model_Entity_Attribute_Exception: SQLSTATE[23000]:
Integrity constraint violation: 1062 Duplicate entry '24-0-3-0' for
key 'CC12C83765B562314470A24F2BDD0F36' in
C:\wamp\www\magento\app\code\core\Mage\Core\Model\Config.php on line 1348
最佳答案
我一直在网上寻找有关如何正确“更新”Magento 产品记录上的团体价格的答案,但没有成功。翻阅 Magento 的源代码也没有让我有任何收获。然而,我发现了两种关于如何清除现有团体价格的解决方案,这样您就不会收到此错误。
1 - 直接SQL查询删除现有的团价数据
$coreResource = Mage::getSingleton('core/resource');
$conn = $coreResource->getConnection('core_write');
$table_name = $coreResource->getTableName('catalog_product_entity_group_price');
$conn->delete($table_name, array('entity_id = '.$product->getId()));
2-将产品的团价设置为空,并保存产品。
$product->setData('group_price', array())->save();
在设置团体价格数据并保存产品之前执行其中任何一个(无需同时执行这两个操作)将避免违反完整性约束,因为它们会有效地删除产品的现有团体价格。方法 1 感觉很粗略,因为我们通常不进行直接的 sql 查询,而是依赖模型类来为我们封装此逻辑,但在我的测试环境(Magento 1.9)中它可以工作。方法 2 可能看起来更安全,但它更耗费资源,因为它保存了整个产品记录,而我们真正需要做的就是更新/删除现有的组价格。另外,它需要冗余保存,因为我们正在“保存以删除”现有的团体价格。
我建议之后重新索引产品价格,因为团体价格数据也存储在“catalog_product_index_group_price”中。
关于api - Magento 更新产品的客户组价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636927/