2012-04-27 74 views
7

嗨,我缺少批量更新的SQL出这个由SKU/UPCMagento的批量更新属性

属性运行EE1.10 FYI

我的代码中的其他一切工作但我“不能确定谁的/是什么/的 为什么实际更新我们的属性,而一直没能找到他们,我的逻辑 是

  1. 打开CSV并抓住所有SKU和相关ATTRIB成一个二维数组
  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社区中的某个人。

回答

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.

我会玩这个函数调用,并用它来代替编写和维护自己的数据库查询。

+0

因此,如果我正在更新产品类别(显然对内容没有内在关系,只是外部的),这是如何关联的。 – ehime 2012-04-30 17:19:26

+1

@Josh Pennington:+1的伟大研究... – Gowri 2012-08-29 22:18:59

+0

所以你在magento/shell/mycode.php中运行这个? – aahhaa 2015-06-09 14:47:06

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/

希望这可以帮助你。