Einzelne EAV-Attribute performant speichern

Um ein Objekt in Magento zu speichern, bringen alle Models die Methode save() mit. Durch diese Methode weiß das Objekt automatisch, wie es sich selbst in der Datenbank abzulegen hat, egal, ob es sich um eine flache Tabelle oder ein EAV-Objekt mit mehreren Tabellen für die einzelnen Attribute handelt.

Ein Aufruf, um ein Objekt aufzurufen, ein Attribut zu bearbeiten und wieder in die Datenbank zu speichern, könnte wie folgt aussehen

// Produkt irgendwoher holen
$product = Mage::getModel("catalog/product")->load(142);
// Attribut ändern
$product->setTitle("Test");
// Produkt speichern
$product->save();

Dies funktioniert sehr gut, bei den EAV-Objekten ist der Speicher-Vorgang jedoch ein komplexer Vorgang, der recht viele Ressourcen vereinnahmt. Während des Speichervorgangs werden alle Attribute des Produktes in die Datenbank geschrieben, obwohl wir eigentlich nur den Titel verändert haben und diesen explizit ändern wollten.

Deshalb existiert in der abstrakten Klasse Mage_Eav_Model_Abstract, von dem alle EAV-Models abgeleitet werden, eine Methode saveAttribute(), mit dessen Hilfe ein einzelnes Attribut bequem und ressourcensparend gespeichert werden kann. Der oben gezeigte Code würde sich dann wie folgt ändern:

// Produkt irgendwoher holen
$product = Mage::getModel("catalog/product")->load(142);
// Attribut ändern
$product->setTitle("Test");
// Produkt anweisen, das geänderte Attribut zu speichern
$product->getResource()->saveAttribute($product, "title");
Avatar
Michael Türk
Seit 2007 entwickelt und betreut Michael Türk Web-Applikationen und vorrangig Online-Shops für Flagbit. Er ist in diversen Magento Hackathons engagiert und Gründungsmitglied des Firegento-Vereins. Außerdem veranstaltet er als Zeremonienmeister das regelmäßig stattfindende E-Commerce Forum in Karlsruhe.
8 Kommentare

Hinterlassen Sie einen Kommentar

Ihr Kommentar*

Name*
Website

Weitere Beiträge zum Thema
TemplaVoila: Element UNmappen
Magento Stammtisch: Community Edition vs. Enterprise Edition
ANT und Zend Studio 7
Javascript in Magento 2, the way to do it