2012-04-27 7 views
7

Hey Leute ich die SQL aus diesem zu Bulk-Update bin fehlt Attribute von SKU/UPCMagento Bulk-Update-Attribute

Lauf EE1.10 FYI

Ich habe den ganzen Rest des Codes arbeiten aber ich "bin nicht sicher, das wer/was/warum die tatsächlich unsere Attribute zu aktualisieren, und nicht in der Lage, sie zu finden, meine Logik ist

  1. öffnen sie eine CSV und greife alle sKUs und die damit verbundene attrib in ein 2d-Array
  2. Analysieren Sie die Artikelnummer in eine ENTITY_ID
  3. die ENTITY_ID Nehmen und das Attribut und Updates laufen, bis
  4. Nehmen Sie den Rest des Tages fertiger seit seiner Freitag

Hier ist meine (fast fertig) Code, Ich würde GREATly einige Hilfe schätzen.

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

Siehe meine Antwort für die Arbeit Produktionscode. Hoffe das hilft jemandem in der Magento Community.

Antwort

24

Während dies technisch funktionieren kann, ist der Code, den Sie geschrieben haben, nur über den letzten Weg, den Sie tun sollten.

In Magento sollten Sie wirklich die vom Code bereitgestellten Modelle verwenden und Datenbankabfragen nicht selbst schreiben.

In Ihrem Fall, wenn Sie Attribute für 1 oder viele Produkte aktualisieren müssen, gibt es eine Möglichkeit für Sie, dies sehr schnell (und ziemlich sicher) zu tun.

Wenn Sie in /app/code/core/Mage/Adminhtml/controllers/Catalog/Product/Action/AttributeController.php nachsehen, werden Sie feststellen, dass dieser Controller für die schnelle Aktualisierung mehrerer Produkte vorgesehen ist.

Wenn Sie in der saveAction aussehen() Funktion können Sie die folgende Codezeile finden:

Mage::getSingleton('catalog/product_action') 
    ->updateAttributes($this->_getHelper()->getProductIds(), $attributesData, $storeId); 

Dieser Code ist verantwortlich für die Aktualisierung alle Produkt-IDs Sie wollen, nur die geänderten Attribute für jeden einzelnen Speicher zu einer Zeit.

Der erste Parameter ist im Grunde ein Array von Produkt-IDs. Wenn Sie nur ein einzelnes Produkt aktualisieren möchten, legen Sie es einfach in ein Array.

Der zweite Parameter ist ein Array, das die Attribute enthält, die Sie für die angegebenen Produkte aktualisieren möchten.Wenn Sie zum Beispiel Preis auf $ 10 und das Gewicht bis 5 aktualisieren wollten, würden Sie das folgende Array übergeben:

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

Dann schließlich die dritte und letzte Attribut ist der Laden ID Sie diese Updates wollen passieren. Höchstwahrscheinlich wird diese Zahl entweder 1 oder 0 sein.

Ich würde mit diesem Funktionsaufruf herumspielen und diesen verwenden, anstatt eigene Datenbankabfragen zu schreiben und zu behalten.

+0

Also, wenn ich die Produktklasse (die offensichtlich keinen inneren Einfluss auf Dinge hat, nur extern) aktualisieren, wie korreliert dies. – ehime

+1

@Josh Pennington: +1 für großes Stück Forschung ... – Gowri

+0

so Sie in magento/shell/mycode.php ausführen? – aahhaa

0

Allgemeine Aktualisierungsabfrage wird wie:

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

Um die [backend_type] im Zusammenhang mit dem Attribut zu finden:

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

Sie weitere Informationen aus dem folgenden Blog-Artikel bekommen:
http://www.blog.magepsycho.com/magento-eav-structure-role-of-eav_attributes-backend_type-field/

Hoffe das hilft Ihnen.