【问题标题】:Magento update customer group prices for productsMagento 更新产品的客户群价格
【发布时间】:2013-01-31 23:17:16
【问题描述】:

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

【问题讨论】:

    标签: api magento product


    【解决方案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”中。

    【讨论】:

    • 嗨,我忘了我发布了这个问题!我也找不到有关如何执行此操作的可靠文档,最后采用了第二种方法,我实际上将团体价格加载到一个临时变量中,按照您建议的方式在项目上清除它们,然后再次设置它们,根据需要修改并再次保存。然而,它非常耗费资源,我最近遇到了一个问题,即这种删除和重新创建方法导致 MySQL 达到 ID 数量的上限——此时在我手动重新启动 SQL 之前无法保存新价格。谢谢
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2014-02-03
      • 2023-03-31
      • 2013-11-03
      相关资源
      最近更新 更多