Загрузка продукта Magento - разница между loadByAttribute и методами загрузки

сегодня я снова сражаюсь с Magento:) И я нашел разницу между

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

и

$product = Mage::getModel('catalog/product')->load($product_id);

Может ли кто-нибудь объяснить мне разницу между этими двумя подходами? Я обнаружил, что когда я загружаю продукт по sku, тогда, когда я пытаюсь повторно сохранить его с измененными данными, я получаю исключение ошибки "Varien_Exception" с сообщением "Invalid method Varien_Object:: save в app\code\core\Mage\CatalogInventory\Model\Observer.php(153): Varien_Object → __ call ('save', Array), что истинно, потому что, как только вы пытаетесь загрузить с помощью sku, тогда другой наблюдатель устанавливает товарный элемент товара как Varien_Object, который выглядит как ловушка или я просто не понимаю его достаточно, но

Я делаю ежедневную разработку Magento с ее начала, поэтому я много знаю о системе, и это ново для меня. Спасибо заранее, Яро.

Ответы

Ответ 1

Интересно. Хотя оба метода предоставят вам экземпляр одной модели продукта с полностью загруженными данными EAV (при условии, что третий параметр loadByAttribute() не передан или равен *), наблюдатели, которые добавляют данные, связанные с запасами, различны для продуктов и продуктов коллекций, но оба этих информационных объекта добавляются в ключ данных продукта "stock_item". Это спорно, но это похоже на ошибку. Я бы подумал, что Mage_CatalogInventory_Model_Observer::saveInventoryData() или Mage_CatalogInventory_Model_Observer::_prepareItemForSave() будут обрабатывать это.

Вы можете решить эту проблему, установив элемент запаса продукта полностью на экземпляр вашего продукта, используя объект stock_item.