Frage

Ich muss ein benutzerdefiniertes Produktattribut für fast alle Produkte in der Datenbank manipulieren. Im Moment habe ich das:

$productsCollection = Mage::getModel('catalog/product')->getCollection();

        foreach ($productsCollection as $_product) {
            $product = Mage::getModel('catalog/product')->load($_product->getEntityId());
            if ($product->getCustomizableonly() === null) {
                $product->setData('customizableonly', 0)->getResource()->saveAttribute($product, 'customizableonly');
            }
        }

Aber die Produkte sind mehr als 2000 und deshalb möchte ich das Produktobjekt selbst nicht laden, sondern nur mit der Produktobjektinstanz aus der Sammlung arbeiten. Das Problem ist, dass dieser obj. Die Instanz enthält nur 1/9 der gesamten Daten des Produktobjekts selbst. Und die 'customizableonly' Attribut ist nicht Teil dieser 1/9.

Wie kann ich auf das Attribut zugreifen, ohne unnötiges Objekt zu laden? Oder im Allgemeinen - wie kann dieser Code maximal optimiert werden, daher ist er bei mehr als 2000 Produkten nicht dramatisch langsam?

War es hilfreich?

Lösung

Holen Sie sich Ihre Sammlung so.

$productsCollection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('customizableonly');

Und hier ist eine andere Möglichkeit, alle Produkte gleichzeitig zu aktualisieren, damit Sie nicht anrufen müssen saveAttribute 2k mal.
Soweit ich verstehe, möchten Sie den Wert für festlegen customizableonly bis 0 für alle Produkte, die diesen Wert nicht haben.
Hier geht:

$toUpdate = array();
foreach ($productsCollection as $_product) {
    if (is_null($_product->getCustomizableonly())) {
        //remember the id for update
        $toUpdate[] = $_product->getId();
    }
}

//update all products
Mage::getSingleton('catalog/product_action')->updateAttributes($toUpdate, array('customizableonly'=>0), 0);  

Dies sollte Ihnen einen Geschwindigkeitsschub bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top