8

我错过了通过 SKU/UPC 批量更新属性的 SQL。

运行 EE1.10 仅供参考

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

  1. 打开 CSV 并将所有 skus 和关联的属性抓取到 2d 数组中
  2. 将 SKU 解析为 entity_id
  3. 获取 entity_id 和属性并运行更新直到完成
  4. 采取自星期五以来的剩余时间

这是我的(几乎完成的)代码,非常感谢一些帮助。

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

请参阅我对工作生产代码的回复。希望这可以帮助 Magento 社区中的某个人。

4

2 回答 2

25

虽然这在技术上可能可行,但您编写的代码只是您应该执行此操作的最后一种方式。

在 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。

我会玩弄这个函数调用并使用它,而不是编写和维护自己的数据库查询。

于 2012-04-29T18:50:06.317 回答
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/

希望这对您有所帮助。

于 2012-04-27T20:17:16.683 回答