2012-04-27 91 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/

希望這可以幫助你。