今天我再次与Magento战斗:)我找到了区别
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $product_sku);
Run Code Online (Sandbox Code Playgroud)
和
$product = Mage::getModel('catalog/product')->load($product_id);
Run Code Online (Sandbox Code Playgroud)
任何人都可以在这两种方法之间取得进展吗?我发现当我通过sku加载产品时,当我尝试用更改的数据重新保存它时,我得到错误异常'Varien_Exception',消息'无效方法Varien_Object ::保存在app\code\core\Mage\CatalogInventory\Model\Observer.php(153):Varien_Object - > __ call('save',Array)这是真的,因为一旦你尝试通过sku加载,那么另一个观察者将产品的库存项目设置为Varien_Object,这看起来像陷阱或者我只是不明白,但是
我从它的开始日常Magento开发,所以我对系统了解很多,这对我来说是新的.在此先感谢,Jaro.
ben*_*rks 17
有趣.虽然这两种方法都会为您提供一个具有满载EAV数据的单一产品模型实例(假设第三个参数loadByAttribute()未通过或未通过*),添加库存相关数据的观察者对于产品与产品集合是不同的,但两种库存信息对象将添加到产品数据键"stock_item"中.这是有争议的,但这感觉就像一个错误.我会认为Mage_CatalogInventory_Model_Observer::saveInventoryData()或Mage_CatalogInventory_Model_Observer::_prepareItemForSave()会处理这个问题.
您可以使用该stock_item对象在产品实例上完全设置产品库存项来解决此问题.