Ошибка в Mage :: getModel ('catalog / product') -> load ($ sku, 'sku');

8

при попытке загрузить товар,

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

мы получаем следующую ошибку:

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

Есть идеи, что не так?

Матиас Джекл
источник

Ответы:

21

Один из доступных вариантов - найти идентификатор из sku, а затем загрузить по идентификатору.

$product = Mage::getModel('catalog/product');
$id = Mage::getModel('catalog/product')->getResource()->getIdBySku('your sku');
if ($id) {
    $product->load($id);
}
Павел Вишневский
источник
7

Как уже упоминалось, Mage_Catalog_Model_Product::loadметод принимает идентификатор продукта, а не SKU. Второй аргумент этого метода может быть указан, чтобы определить, какие атрибуты должны быть загружены в модель. Он не предназначен для использования в качестве поля «загрузить по этому атрибуту».

Чтобы загрузить товар по атрибуту, вы должны использовать:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
Саймон
источник
4
Предупреждение: loadByAttribute использует коллекцию и фильтры по заданному атрибуту. Это означает, что наблюдатели за загрузкой товара не применяются, и у вас нет полных данных о запасе, галерее и т. Д., Как у вас было бы load().
Фабиан Шменглер
-2

$product= Mage::getModel('catalog/product')->load(123456); правильный метод, где 123456 - это идентификатор продукта.

Вы можете попробовать это $product= Mage::getModel('catalog/product')->load('sku', 'mysku');вместо этого, я думаю, что порядок вашего аргумента был неправильным.

Жюльен Лачал
источник