8

SKU/UPCによって属性を一括更新するためのSQLがありません。

EE1.10を実行中

残りのコードはすべて機能していますが、属性を実際に更新するのは誰/何/なぜかわからず、属性を見つけることができませんでした。私のロジックは次のとおりです。

  1. CSVを開き、すべてのSKUと関連する属性を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を更新し、一度に1つのストアの変更された属性のみを更新します。

最初のパラメーターは、基本的に製品IDの配列です。単一の製品のみを更新する場合は、それを配列に配置するだけです。

2番目のパラメーターは、特定の製品について更新する属性を含む配列です。たとえば、価格を$ 10に、重みを5に更新する場合は、次の配列を渡します。

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

最後に、3番目の最後の属性は、これらの更新を実行するストア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 に答える