Fehler bei Mage :: getModel ('Katalog / Produkt') -> Laden ($ sku, 'sku');

8

Wenn Sie versuchen, ein Produkt zu laden,

$foundProduct =  Mage::getModel('catalog/product')->load($sku, 'sku');

Wir erhalten den folgenden Fehler:

Fatal error:
Uncaught exception 'Exception' with message 'Warning: Invalid argument supplied for foreach()
in app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 954' in app/code/core/Mage/Core/functions.php:245 Stack trace:
#0 app/code/core/Mage/Eav/Model/Entity/Abstract.php(954): mageCoreErrorHandler(2, 'Invalid argumen...', '/var/www/magent...', 954, Array)
#1 app/code/core/Mage/Catalog/Model/Resource/Abstract.php(698): Mage_Eav_Model_Entity_Abstract->load(Object(Mage_Catalog_Model_Product), '120x180 ES-bale...', 'sku')
#2 app/code/core/Mage/Core/Model/Abstract.php(225): Mage_Catalog_Model_Resource_Abstract->load(Object(Mage_Catalog_Model_Product), '120x180 ES-bale...', 'sku')
#3 updatemagento.php(197): Mage_Core_Model_Abstract->load('120x180 ES-bale...', 'sku')
#4 {main} thrown in app/code/core/Mage/Core/functions.php on line 245

Irgendwelche Ideen, was falsch läuft?

Matthias Jaekle
quelle

Antworten:

21

Eine Option, die Ihnen zur Verfügung steht, besteht darin, die ID in der SKU zu finden und dann nach ID zu laden.

$product = Mage::getModel('catalog/product');
$id = Mage::getModel('catalog/product')->getResource()->getIdBySku('your sku');
if ($id) {
    $product->load($id);
}
Paul Wisniewski
quelle
7

Wie von anderen erwähnt, verwendet die Mage_Catalog_Model_Product::loadMethode die ID des Produkts, nicht die SKU. Das zweite Argument dieser Methode kann angegeben werden, um zu definieren, welche Attribute in das Modell geladen werden sollen. Es ist nicht dazu gedacht, als Feld "Von diesem Attribut laden" verwendet zu werden.

Um ein Produkt über ein Attribut zu laden, sollten Sie Folgendes verwenden:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
Simon
quelle
4
Warnung: loadByAttribute Verwendet eine Sammlung und filtert nach dem angegebenen Attribut. Dies bedeutet, dass die Beobachter für das Laden von Produkten nicht zutreffen und Sie nicht die vollständigen Daten mit Lagerbestand, Galerie usw. haben, wie Sie es mit hätten load().
Fabian Schmengler
-2

$product= Mage::getModel('catalog/product')->load(123456); ist die richtige Methode, wobei 123456 die ID des Produkts ist.

Sie könnten das $product= Mage::getModel('catalog/product')->load('sku', 'mysku');stattdessen versuchen , ich denke, die Reihenfolge Ihrer Argumentation war falsch.

Julien Lachal
quelle