Ich suche nach der schnellsten und zuverlässigsten Methode zur Aktualisierung von Massenattributen. Unten sind die Methoden aufgeführt, die mir bekannt sind, aber ich weiß nicht, mit welchen ich gehen soll.
$store_id = 0;
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($product_id),
array('attribute_code' => $attribute_code),
$store_id
);
oder
$product->setData($attribute_code, 1234);
$product->getResource()->saveAttribute($product, $attribute_code);
magento-1.8
magento-enterprise
product-attribute
best-practice
Deepak Mallah
quelle
quelle
load
. das alles andere als schnell. Beispielsweise ist in Methode 2 die erste Zeile mit der Produktladung unbrauchbar. Sie verwenden$product
nirgendwo.Tatsächlich gibt es drei Möglichkeiten, ein Attribut für ein Produkt zu aktualisieren, ohne das gesamte Produkt zu speichern. Je nach Code / Anforderungen kann einer schneller sein als der andere.
Methode 1:
Methode 2:
Methode 3: (am schnellsten)
Alle oben genannten Methoden sind viel schneller und schonen das gesamte Produkt. Trotzdem gibt es einige wesentliche Leistungsunterschiede:
Method 1
:Method 2
:(Sie können mehrere Produkte und Attribute übergeben)
Method 3
:(es ist also ein gemischter Ansatz zwischen Methode 1 und 2).
Methode 3 ist die flexiblere Methode, da Sie diese Produkte / Attribute manuell neu indizieren müssen. (um sie im Frontend zu aktualisieren)
Es kann nützlich sein, wenn Sie viele Produkte schnell aktualisieren und am Ende den Neuindex aufrufen möchten.
(Wenn Sie Methode 2 verwenden, wird nach dem Update für jedes Produkt ein Neuindex aufgerufen, und diese mehreren Aufrufe verlangsamen den gesamten Prozess.)
Informationen zum manuellen Neuindizieren eines einzelnen Produkts finden Sie in den von Mage_Catalog_Model_Product_Flat_Indexer bereitgestellten Funktionen wie:
updateAttribute($attributeCode, $store = null, $productIds = null)
updateProduct($productIds, $store = null)
quelle
catalog_product_entity
.value_id
FROMcatalog_product_entity
WHERE (entity_type_id = 4 AND attribute_id = '68 'AND entity_id = '29') `` `Das wird nicht erwartet. Läuft am 1.9.3.2Aktualisieren
"Massenattribut-Aktualisierung" für Attribute oder Produkte?
Denken Sie, die Aktualisierung mehrerer Attribute ist bereits beantwortet, aber für Produkte kann dies nützlich sein ...
Wenn Sie Produkte aus der Sammlung aktualisieren möchten, sollten Sie dies nicht tun ...
Dadurch werden Ereignisse ausgelöst, Preisregeln und Indizes neu erstellt. Damit werden keine Ereignisse (und einige andere Dinge) übersprungen und sind viel schneller.
Um Preisaktualisierungen zu vermeiden, können Sie Folgendes hinzufügen:
Informationen zum Aktivieren / Deaktivieren der Neuindizierung finden Sie unter https://github.com/Flagbit/Magento-ChangeAttributeSet/commit/676f3af77fec880bc64333403675d183e8639fae
Und auch das Leeren des Caches vor der Massenaktualisierung (Produktaktualisierung) kann die Leistung steigern ...
Einige Zahlen vom Debuggen hier: https://github.com/Flagbit/Magento-ChangeAttributeSet/issues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
scheint nicht die schnellste Methode zu sein ... zumindest nicht bei eingeschaltetem Mutlistore-Setup und Flat Tables ...saveAttribute()
updateAttributes()
updateAttributes()
(Ressourcen-Singleton)quelle
updateAttributes() (resource singleton)
den tatsächlichen Admin-Wert an? oder die ID des Dropdown-Elements? (Irgendwie bekommen wir mit dieser Methode immer keinen Wert / leeren Wert, dh nichts ausgewählt