Magento Bulk更新属性

时间:2012-04-27 18:04:17

标签: api magento attributes skus

嘿伙计们,我错过了这个由SKU / UPC批量更新属性的SQL

运行EE1.10 FYI

我已经完成了所有其余的代码,但我不确定是谁/什么/为什么 我的逻辑实际上更新了我们的属性,并且无法找到它们 是

  1. 打开CSV并抓取所有skus及相关属性为二维数组
  2. 将SKU解析为entity_id
  3. 获取entity_id和属性并运行更新直到完成
  4. 自星期五以来的剩余时间
  5. 这是我的(差不多完成的)代码,我非常感谢一些帮助。

        /**
         * FUNCTION: updateAttrib
         * 
         * REQS: $db_magento
         * Session resource
         * 
         * REQS: entity_id
         * Product entity value
         * 
         * REQS: $attrib
         * Attribute to alter
         * 
         */
    

    请参阅我对工作生产代码的回复。希望这有助于Magento社区中的某些人。

2 个答案:

答案 0 :(得分:24)

虽然这在技术上可行,但您编写的代码只是最后一种方法。

在Magento中,你真的应该使用代码提供的模型而不是自己编写数据库查询。

在您的情况下,如果您需要更新1个或多个产品的属性,有一种方法可以非常快速地(非常安全地)这样做。

如果您查看:/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/Action/AttributeController.php,您会发现此控制器专用于快速更新多个产品。

如果你查看saveAction()函数,你会发现以下代码行:

Mage::getSingleton('catalog/product_action')
    ->updateAttributes($this->_getHelper()->getProductIds(), $attributesData, $storeId);

此代码负责更新所需的所有产品ID,一次只更新任何一个商店的已更改属性。

第一个参数基本上是一个产品ID数组。如果您只想更新单个产品,只需将其放入数组中即可。

第二个参数是一个数组,其中包含要为给定产品更新的属性。例如,如果您想将价格更新为10美元并将权重更新为5,则可以传递以下数组:

array('price' => 10.00, 'weight' => 5)

最后,第三个也是最后一个属性是您希望这些更新发生的商店ID。这个数字很可能是1或0。

我会使用此函数调用并使用它而不是编写和维护您自己的数据库查询。

答案 1 :(得分:0)

常规更新查询将如下:

UPDATE 
  catalog_product_entity_[backend_type] cpex 
SET
  cpex.value = ? 
WHERE cpex.attribute_id = ? 
  AND cpex.entity_id = ?

为了找到与属性相关联的[backend_type]:

SELECT 
  backend_type
FROM
  eav_attribute
WHERE entity_type_id =
  (SELECT
    entity_type_id
  FROM
    eav_entity_type
  WHERE entity_type_code = 'catalog_product')
AND attribute_id = ?

您可以从以下博客文章中获得更多信息:
http://www.blog.magepsycho.com/magento-eav-structure-role-of-eav_attributes-backend_type-field/

希望这会对你有所帮助。