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?

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);
}

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);

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.