不直接查詢Magento數據庫。我如何根據數量和客戶羣組刪除某個產品的所有等級價格?更新產品的所有層級價格
然後爲此產品添加新的等級價格。
實施例:
刪除所有層的價格與SKU一個產品:FD001
其中客戶組ID:4
PHP 5.3 的Magento 1.4.2
不直接查詢Magento數據庫。我如何根據數量和客戶羣組刪除某個產品的所有等級價格?更新產品的所有層級價格
然後爲此產品添加新的等級價格。
實施例:
刪除所有層的價格與SKU一個產品:FD001
其中客戶組ID:4
PHP 5.3 的Magento 1.4.2
我結束了使用直接數據庫查詢解決這個。
一如既往,我正在尋找更好的答案。
我哈克解決方案:
$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)'
);
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();
}
我不需要分級價格列表。我想根據標準刪除它們。 我正在尋找類似於我可以運行刪除以刪除它們的模型。 – 2011-12-14 09:58:32
你首先要取消設置層價格和保存產品,然後添加層價格(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();
我可以證實這個作品。然而,在您的第一次保存和設置新的價格之間,您需要另一次加載。至少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
@ 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
}
magento的要點是不使用直接的SQL查詢。 – Qix 2014-05-07 17:34:32