引用オブジェクトを読み込めません


24

sales/quoteロード時に、オブジェクトは他のオブジェクトとは異なる動作をしますか?以下を参照してください。

作品:

$quote = Mage::getModel('sales/quote')->getCollection()
    ->addFieldToFilter('entity_id', $quoteId)
    ->getFirstItem();
print_r($quote->getData()); // shows right data

動作しません:

$quote = Mage::getModel('sales/quote')->load($quoteId);
print_r($quote->getData()); // empty

どちら$quoteも正しいクラスですMage_Sales_Model_Quote


5つの賛成票では、この質問がトピック外で再現不可能とマークされている方法がわかりません。この問題は再現できます。フロントエンドの注文ビューページと管理者の注文ビューページで見積もりをロードするだけで、異なる動作をします。このシナリオではwebbiedaveの答えは完璧に機能します。
レーナパレフ

回答:


29

最初にストアを設定します。

$store = Mage::getSingleton('core/store')->load(1);

$quote = Mage::getModel('sales/quote')->setStore($store)->load($quoteId);

2

いいえ、Mage_Sales_Model_Quote他のすべてのデータベースベースのモデルと同じです。あなたは何か間違っています。たぶん$quoteId?正しいですか?両方のコードが機能するはずです。


ええ、私はの代わりに整数を使ってみました$quoteId。私はおそらく$quoteId文字列か何かである必要があると考え始めています。私のスクリプトは現在実行中なので、明日確認します。
musicliftsme

うーん、文字列または整数でハードコードされた引用エンティティIDを持つ別のインスタンスでも機能しません。ファビアン、私が投稿したコードを試してみましたか?
musicliftsme

1
モデルは他のdbモデルと同じですが、リソースモデルMage_Sales_Model_Resource_Quoteは、_getLoadSelect()によってストアIDにハードコードされたフィルターを実装します。それを回避する方法はを使用することMage::getResourceSingleton('sales/quote')->loadByIdWithoutStore($quote, $order->getQuoteId())です。これで、完全な顧客オブジェクトをロードせずにセッションを開始するように伝えることができれば、私は幸せなキャンピングカーです。
メルビン14

3
同じことに直面している人にとっては、見積品目のロード時にセッションをインスタンス化するのはSalesRule / Model / Observer.phpです。customerGroupIdを取得するだけです。Sales_Model_Quoteを書き換え、Mage :: registryで顧客グループIDを設定し、Mage_SalesRule_Model_Observer-> addProductAttributesを最初に表示するように設定することでこれを解決しました。
メルビン14

2
これを見た。私は再び開くことに投票しました。メルビン、ありがとう。
musicliftsme

0

使用できます

$quote = Mage::getModel('sales/quote')->loadByIdWithoutStore($quoteId);

Magnto Enterpriseバージョンで動作します。1.14.2.4

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.