【发布时间】:2011-10-17 01:26:21
【问题描述】:
有人可以帮忙吗?
在 Magento 1.5.0.1 中,我正在尝试保存可配置产品的属性值。我使用管理员将我的属性添加到相应的产品中。
我查看了Modify automatically an attribute with magento 和Programmatically change product attribute at store view level,因此能够想出看似简单的代码,但不幸的是,它只在某些时候有效——即对于没有等级价格的可配置产品...
这是一段sn-p代码:
$id = 126; # id of existing product
$product = Mage::getModel('catalog/product')->load($id);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product->setx_pos(123);
// tried this too, does not make a difference: $product->setData('x_pos', 123);
$product->save();
如果可配置产品没有具有等级价格的产品,它会完美运行。它可以有没有等级价格的等级产品,这种情况下可以节省。如果等级产品有等级价格——那么我得到了例外:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '126-1-0-5.0000-0' for key 'UNQ_CATALOG_PRODUCT_TIER_PRICE'
Trace:
#0 C:\magento\app\code\core\Mage\Eav\Model\Entity\Abstract.php(1513): Mage_Eav_Model_Entity_Abstract->walkAttributes('backend/afterSa...', Array)
#1 C:\magento\app\code\core\Mage\Catalog\Model\Resource\Eav\Mysql4\Product.php(142): Mage_Eav_Model_Entity_Abstract->_afterSave(Object(Mage_Catalog_Model_Product))
#2 C:\magento\app\code\core\Mage\Eav\Model\Entity\Abstract.php(1013): Mage_Catalog_Model_Resource_Eav_Mysql4_Product->_afterSave(Object (Mage_Catalog_Model_Product))
#3 C:\magento\app\code\core\Mage\Core\Model\Abstract.php(318): Mage_Eav_Model_Entity_Abstract->save(Object(Mage_Catalog_Model_Product))
#4 C:\magento\app\design\frontend\default\OneOffFit\template\page\data.phtml(90): Mage_Core_Model_Abstract->save()
我用谷歌搜索了这个错误 - 唯一的参考是未回答的问题。
为什么在这种情况下 Magento 会更新等级价格?我做错什么了吗?我应该先更新相关产品(它们具有相同的属性但具有未设置的值)吗?或者更确切地说,我应该怎么做?有人可以帮忙吗?
【问题讨论】:
-
在 Magento 中编写 setter 的传统方式是驼峰式,对于“x_pos”,它应该是
setXPos(123)。这个迂腐不能回答你的问题,但它可能会帮助未来检查你的代码的开发人员。