Magento更新产品的客户群价格

时间:2013-01-31 23:17:17

标签: api magento product

我正在尝试使用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 

2 个答案:

答案 0 :(得分:1)

尝试将此扩展用于magmi组价格:

https://github.com/tim-bezhashvyly/magmi-grouped-price-plugin

答案 1 :(得分:1)

我一直在网上搜索如何正确&#34;更新&#34; 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可能看起来更安全,但它更节省资源,因为它保存了整个产品记录,而我们真正需要做的就是更新/删除现有的组价格。此外,它需要冗余保存,因为我们需要保存以删除&#34;现有的团体价格。

我建议之后重新编制产品价格索引,因为群组价格数据也存储在&quot; catalog_product_index_group_price&#39;。