Kurzinfo


Andreas von Studnitz

mehr »

Andreas von Studnitz arbeitet seit 2012 als Geschäftsführer und Entwickler für die Magento-Agentur integer_net GmbH. Aktuelle Informationen finden Sie unter www.integer-net.de

Kontakt

Bitte kontaktieren Sie mich über die Website von integer_net.

mehr »

< Magento: Anzeigen von Bestellbedingungen in einem Fenster statt einer Textbox

Magento: Schnelles Auslesen von Attributen

27.10.2010 16:21

Magento braucht dank des EAV-Datenbankmodells, das es sehr flexibel macht, relativ viele Ressourcen zum Laden und Speichern von Datensätzen wie Produkten, Kategorien, Kunden und Kundenadressen. Will man nur einzelne oder wenige Attribute auslesen oder ändern, entsteht ein deutlicher Overhead.

Wie man einzelne Attribute schnell speichern kann, ohne das ganze Produkt (z.B.) speichern zu müssen, hat die Agentur flagbit bereits vor einiger Zeit veröffentlicht.

In Kürze: statt $product->save() wird $product->getResource()->saveAttribute($product, 'sku') aufgerufen, um nur die Artikelnummer ("SKU") eines Produktes zu speichern. 

Zum Auslesen war mir das bisher nicht bekannt. Eine Recherche hat allerdings ergeben, dass eine Methode dafür existiert. Sie befindet sich in der Klasse Mage_Catalog_Model_Resource_Eav_Mysql4_Abstract und sieht wie folgt aus:

/**
* Retrieve attribute's raw value from DB.
*
* @param int $entityId
* @param int|string $attribute atrribute's id or code
* @param int|Mage_Core_Model_Store $store
* @return bool|string
*/
public function getAttributeRawValue($entityId, $attribute, $store)
{ ...

Aufgerufen wird diese Funktion z.B. wie folgt:

$attributeValue = Mage::getModel('catalog/product')->getResource()->getAttributeRawValue($productId, 'sku', Mage_Core_Model_App::ADMIN_STORE_ID);

Hiermit ist es möglich, einzelne Attribute vieler Produkte deutlich schneller auszulesen, da nicht das ganze Produkt geladen werden muss, sondern nur das Attribut. Benötigt habe ich das für eine Importfunktion, aber auch andere Anwendungsfälle könnte ich mir vorstellen.

Kommentare