magelounge

Infos, Tipps und Tricks rund um Magento Commerce

Start › 2010 › Oktober

Produkte schneller speichern mit addAttributeUpdate()

Codeschnipsel 2 Kommentare

Archiv-Beitrag aus 2010 – Magento mache ich heute nur noch selten. Aktuell: com:werft (Shopware 6, Laravel & PHP) · siepker.com · kontor:worx · campr

Das Speichern von Produkten in Magento ist immer eine zeitkritische Herausforderung. Gerade in Importskripten und bei Massenupdates geht hier wertvolle Zeit verloren. Hier findet Ihr einen Ansatz, mit dem man sehr schnell mit den Magento-eigenen Methoden Daten speichern kann.

Erstmal der übliche Weg:

$sku = '123';
$storeId = 0;
$id = $product->getIdBySku($sku);
$product->setStoreId($storeId);
$product->load($id);
$product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_DISABLED);
$product->save();

Hierbei wird jedoch durch $product->save() ein großer Overhead mitgeschleppt. Wenn man nur sehr wenige Attribute ändern möchte, geht dies deutlich schneller:
$sku = '123';
$storeId = 0;
$id = $product->getIdBySku($sku);
$product->load($id);
$product->addAttributeUpdate('status',Mage_Catalog_Model_Product_Status::STATUS_DISABLED,$storeId);

Eigenen Benchmarks auf meiner lokalen Entwicklungsumgebung (Zend Server CE auf Macbook Pro, Cache deaktiviert, 3 Storeviews) haben gezeigt, dass einfache Änderungen in dieser Art ca. 50x schneller gespeichert werden. 100 Änderungen werden jetzt nicht mehr in 200 Sekunden gespeichert, sondern in 3-4 Sekunden.

2 Kommentare

Vinai Kopp

Hi,
die Methode ist ausgezeichnet, ich wusste noch nicht das $product->setData(...)->getResource()->saveAttribute() jetzt diesen Wrapper hat!
Das Problem ist dabei allerdings das (je nach Attribut) nicht alle Indexe aktualisiert werden (flat calatlog product table, category product index, price index,...).
Das muss dann nach den updates von Hand angestoßen werden.

Michael Karl

Vielen Dank. Die Methode funktioniert hervorragend, und läuft merklich schneller. Der Abgleich mit dem ERP-System lässt sich nun sehr viel schnell vornehmen. Die Aktualisierung der Indexierung haben wir im Skript mit aufgenommen.

Kommentare sind geschlossen – dieser Blog ist ein Archiv.

Meine Projekte

Der Blog ist Archiv – gebaut wird heute hier:

com:werft

Software-Entwicklung für Shopware 6, Laravel und PHP – als Freelancer unterstütze ich Shopbetreiber und verstärke Agentur-Teams.

comwerft.de →

siepker.com

Meine persönliche Seite: Blog über Camping, Radtouren, Segelfliegen und Software.

siepker.com →

kontor:worx

Bürogemeinschaft & Coworking in Rheine seit 2012 – Büros XS–L, FixedDesk, FlexDesk und ein Meetingraum, mitten in der Innenstadt.

kontorworx.de →

campr

35 Jahre Camping-Leidenschaft: meine persönlich besuchten Stellplätze in Europa – und die Basis für etwas Größeres.