2012-04-27 5 views
7

やあみんな属性私は "/私のロジック は、実際に私たちの属性を更新し、それらを見つけることができていない理由 の何/でMagentoの一括更新がEE1.10私は、コードのすべての残りの部分が動作しているFYI</em></p> <p>を実行SKU/UPC</p> <p><em>属性によって、私は一括更新するには、この外のSQLを欠けている

  1. オープンCSVよく分からないとの中にすべてのSKUおよび関連ATTRIBをつかみます2次元配列
  2. 解析SKU ENTITY_ID
  3. 終了まで、金曜日

は、ここに私の(ほぼ完成)のコードですので、一日の残りの部分を取るENTITY_IDと属性を取り、アップデートを実行し、私は大いに助けに感謝します。

/** 
    * 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の配列です。単一の製品のみを更新する場合は、配列に入れてください。

第2パラメータは、指定した製品に対して更新する属性を含む配列です。たとえば、あなたが5に$ 10の重量に価格を更新したい場合、あなたは以下の配列を渡します:

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

続いて最後に、3番目と最後の属性を使用すると、これらの更新はに起こるしたい店舗のIDです。ほとんどの場合、この数値は1または0のいずれかになります。

私はこの関数呼び出しで遊んで、独自のデータベースクエリを記述して管理するのではなく、これを使用します。

+0

したがって、私はProduct Classを更新しています(これは明らかに物事に内在するものではなく、ちょうど外部のものです)。これはどのように相関しますか? – ehime

+1

@Josh Pennington:大きな研究のための+1 ... – Gowri

+0

これをmagento/shell/mycode.phpで実行しますか? – aahhaa

0

一般的な更新クエリは次のようになります:あなたは、次のブログ記事からより多くの情報を得ることができます

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 = ? 

::[BACKEND_TYPE]属性に関連付けられているを見つけるために

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


http://www.blog.magepsycho.com/magento-eav-structure-role-of-eav_attributes-backend_type-field/

希望します。

関連する問題