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");
0 Kommentare