Error en Mage :: getModel ('catálogo / producto') -> load ($ sku, 'sku');

8

cuando intentas cargar un producto,

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

obtenemos el siguiente error:

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

Alguna idea de lo que va mal?

Matthias Jaekle
fuente

Respuestas:

21

Una opción disponible para usted sería encontrar la ID del sku y luego cargarla por ID.

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

Como lo mencionaron otros, el Mage_Catalog_Model_Product::loadmétodo toma la identificación del producto, no la SKU. El segundo argumento de este método puede especificarse para definir qué atributos deben cargarse en el modelo. Se no destinado a ser utilizado como una "carga por este atributo" campo.

Para cargar un producto por un atributo, debe usar:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
Simón
fuente
44
Advertencia: loadByAttribute utiliza una colección y filtra por el atributo dado. Esto significa que los observadores para la carga del producto no se aplican y no tiene los datos completos con stock, galería, etc., como lo haría con load().
Fabian Schmengler
-2

$product= Mage::getModel('catalog/product')->load(123456); es el método correcto, donde 123456 es la identificación del producto.

Podrías intentar eso en su $product= Mage::getModel('catalog/product')->load('sku', 'mysku');lugar, creo que el orden de tu argumento era incorrecto.

Julien Lachal
fuente