2013-01-31 90 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,否則不會保存新的價格。謝謝 –

相關問題