Erreur sur Mage :: getModel ('catalogue / produit') -> load ($ sku, 'sku');

8

lorsque vous essayez de charger un produit,

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

nous obtenons l'erreur suivante:

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

Des idées ce qui ne va pas?

Matthias Jaekle
la source

Réponses:

21

Une option à votre disposition serait de trouver l'ID dans le sku, puis de le charger par ID.

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

Comme mentionné par d'autres, la Mage_Catalog_Model_Product::loadméthode prend l'ID du produit, pas le SKU. Le deuxième argument de cette méthode peut être spécifié pour définir les attributs à charger dans le modèle. Il n'est pas destiné à être utilisé comme un champ "charger par cet attribut".

Pour charger un produit par un attribut, vous devez utiliser:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
Simon
la source
4
Avertissement: loadByAttribute utilise une collection et des filtres par l'attribut donné. Cela signifie que les observateurs du chargement des produits ne s'appliquent pas et que vous n'avez pas les données complètes avec le stock, la galerie, etc. comme vous le feriez avec load().
Fabian Schmengler
-2

$product= Mage::getModel('catalog/product')->load(123456); est la bonne méthode, où 123456 est l'ID du produit.

Vous pouvez essayer cela à la $product= Mage::getModel('catalog/product')->load('sku', 'mysku');place, je pense que l'ordre de votre argument était faux.

Julien Lachal
la source