2012-06-07 6 views
14

私は再びMagentoのと戦っている今日:)と私はMagentoの製品ロード - loadByAttributeと負荷方法の違い

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

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

の違いは、誰もが私に違いをexaplainことができましたこれらの2つのアプローチの間に?私はスキューで製品をロードするときに、変更されたデータで再保存しようとすると、メッセージ 'Varien_Exception'でエラー例外が発生することを発見しました。無効なメソッドVarien_Object :: app \ code \ core \ Mage \ CatalogInventory \ Model \ Observer.php(153):Varien_Object - > __ call( 'save'、Array)これは、skuでロードしようとすると、別のオブザーバーが商品の在庫アイテムをVarien_Objectとして設定します。それほど分かりませんが、

私は日常的にMagentoの開発をbeginnigからしていますので、私はシステムについてよく知っていて、これは私のために新しいものです。事前にありがとう、Jaro。

+0

おかげさまで、同じ問題がありました。現在はskuでロードしています。その後、IDで – wutzebaer

+0

ありがとうございました。最初の方法は私のために働いたと私は信じて、2番目の方法は変数を受け入れていない?私がSKU番号をハードコードしたときに機能しました。 –

答えて

17

興味深い。どちらの方法もEAVデータが完全にロードされた単一の製品モデルインスタンス(loadByAttribute()が渡されないか、*)を使用している場合、在庫関連データを追加するオブザーバーは製品と製品のコレクションで異なります在庫情報オブジェクトは、製品データキー "stock_item"に追加されます。それは議論の余地がありますが、これはバグのように感じます。私はMage_CatalogInventory_Model_Observer::saveInventoryData()またはMage_CatalogInventory_Model_Observer::_prepareItemForSave()がこれを処理すると思います。

stock_itemオブジェクトを使用して製品在庫に商品在庫アイテムを完全に設定することで、この問題を解決できます。

+0

これは一種のバグのように見えます。コレクションを作成した偽の株価情報を持つ製品を作成し、一度変更したい場合は失敗します。これを理解するのに3日かかりました。なぜなら、それは本当に深刻なことであり、あなたはそれを疑う余地はないと思います。このような情報を他の人と共有する必要があります。 – Jaro

+2

[Magento Contributorになる](http://www.magentocommerce.com/images/uploads/MCA-Magento-Contributor-Agreement-230909.pdf): - ) – benmarks

+0

それはまだ1.8で起こるようですか?今日私はその問題に直面した。 – Nikitas

関連する問題