2011-12-13 56 views
3

不直接查詢Magento數據庫。我如何根據數量和客戶羣組刪除某個產品的所有等級價格?更新產品的所有層級價格

然後爲此產品添加新的等級價格。

實施例:
刪除所有層的價格與SKU一個產品:FD001
其中客戶組ID:4

PHP 5.3 的Magento 1.4.2

回答

1

我結束了使用直接數據庫查詢解決這個。

一如既往,我正在尋找更好的答案。

我哈克解決方案:

$product = Mage::getModel('catalog/product')->load(9999); 
$dbc = Mage::getSingleton('core/resource')->getConnection('core_write'); 
$dbc->query('DELETE FROM `catalog_product_entity_tier_price` WHERE `entity_id` = ' . intval($product->getId()) . ' AND `customer_group_id` IN(3,4,6,7) AND qty = 1'); 
$dbc->query(
    'INSERT INTO `catalog_product_entity_tier_price` (`entity_id`,`all_groups`,`customer_group_id`,`qty`,`value`,`website_id`) 
    VALUES ('. intval($product->getId()) . ',0,' . intval($id) . ',1,' . floatval($price) . ',0)' 
    ); 
+0

magento的要點是不使用直接的SQL查詢。 – Qix 2014-05-07 17:34:32

2

There's an API available for the product tier price

或者,您可以使用一些PHP代碼,使用Magento代碼來查詢符合這些條件的產品列表,然後調整每個產品。 Alan Storm has an article about how Model Collections work (they're the type of object that you would use for this).

基本上它會是這樣的東西刪除產品,我不知道你將如何設置等級價格,但你可以看看the generated phpdoc documentation。我正在選擇與customer_group 4匹配的每個產品,然後刪除每個產品。你必須弄清楚如何根據層次價格過濾的東西出來......

<?php 
require 'app/Mage.php'; 
$app = Mage::app('default'); // Mage_Core_Model_App 
$store = $app->getStore(); // Mage_Core_Model_Store 

$products = Mage::getModel('catalog/product')->getCollection(); 
// filter out anything that doesnt match the customer group 4 
$products->addFieldToFilter('customer_group', '4'); 

// loop through each product and delete it 
for ($products->load() as $product) { 
    $product->delete(); 
} 
+0

我不需要分級價格列表。我想根據標準刪除它們。 我正在尋找類似於我可以運行刪除以刪除它們的模型。 – 2011-12-14 09:58:32

3

你首先要取消設置層價格和保存產品,然後添加層價格(S),並再次保存。

Mage::getModel("catalog/product")->load(123) 
    ->unsTierPrice() 
    ->save() 
    ->setTierPrice(array(
     array(
      'website_id' => 0, 
      'all_groups' => 0, 
      'cust_group' => 4, 
      'price'   => 99.99, 
      'price_qty'  => 1 
     ), 
     array() // another tier, etc 
    )) 
    ->save(); 
+2

我可以證實這個作品。然而,在您的第一次保存和設置新的價格之間,您需要另一次加載。至少1.9.1。`法師:: getModel( 「目錄/產品」) - >負載(123) - > unsTierPrice() - >保存() - >負載() - > setTierPrice(陣列( 陣列( 'website_id' => 0, 'all_groups'=> 0, 'cust_group'=> 4, '價格'=> 99.99, 'price_qty'=> 1 ) 陣列()//另一層等 ) ) - > save();` – 2015-07-23 13:07:22

0

@ omouse的回答指向我們Magento的API價格層次。 [Updated Link for Magento 1.X's Tier Price API]注意:我正在使用Magento 1.9.2.2。

在四處尋找最有效的方式來更新產品的層級價格(不使用直接SQL)後,我發現API是最快的方法。它仍然是緩慢的,但它比其他的方法,我發現其中建議做這樣的事情更好:

// Works, but is slow 
$product = Mage::getModel('catalog/product')->load($productId); 
$product->unsTierPrice(); 
$product->save(); 
$product->load(); 
$product->setTierPrice($tiers); 
$product->save(); 

更好的,我做我的梯隊數組的數組成層對象的數組,以及所使用的API函數來更新產品:

// Build the array of tier level objects 
foreach ($tierLevels as $tierLevel) { 
    $tiers[] = (object) array(
     'website' => 'all', 
     'customer_group_id' => 'all', 
     'qty' => $tierLevel['min_qty'], 
     'price' => $tierLevel['unit_price'] 
    ); 
} 

// Use the API to do the update 
try { 
    $tierPriceApi = Mage::getSingleton('catalog/product_attribute_tierprice_api_v2'); 
    $tierPriceApi->update($productId, $tiers); 
} 
catch (Exception $e) { 
    // Handle the exception 
} 
相關問題