2013-01-31 53 views
2

我试图用Mage更新Magento中的客户群价格(因为我无法在SOAP V2 API中找到这样做的方法)。我找到了一个StackOverflow示例,但它不适用于我。我正在使用的代码如下:Magento更新产品的客户群价格

<?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 

回答

1

我一直在网上淘的答案,如何在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”中。

+0

嗨,我忘了我发布了这个问题!我也找不到有关如何做到这一点的可靠文件,最后采取了第二种方法,我实际上将团队价格加载到一个临时变量中,按照您所建议的方式将其清除,然后重新设置它们,根据需要修改并再次保存。然而,它非常耗费资源,而且最近我遇到了一个问题,那就是删除和重新创建方法导致MySQL达到了ID数量的上限 - 在这一点上,除非手动重新启动SQL,否则不会保存新的价格。谢谢 –

相关问题