无法加载报价对象


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的答案在这种情况下非常有效。
Reena Parekh

Answers:


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需要是字符串或其他东西。我的脚本当前正在运行,所以明天再检查。
2014年

嗯,它不能在另一个实例上使用引号实体ID硬编码为字符串或整数的形式。Fabian,您是否尝试过我发布的部分代码?
musicliftsme 2014年

1
尽管该模型与其他数据库模型一样,但是资源模型Mage_Sales_Model_Resource_Quote通过_getLoadSelect()对商店ID实施了硬编码过滤器。解决方法是使用Mage::getResourceSingleton('sales/quote')->loadByIdWithoutStore($quote, $order->getQuoteId())。现在,只要我能告诉它不要加载完整的客户对象并开始会议,我就是一个快乐的露营者。
梅尔文2014年

3
对于面临相同情况的任何人:是SalesRule / Model / Observer.php实例化报价项目加载时的会话。只是为了获得customerGroupId。我已通过重写Sales_Model_Quote并在Mage :: registry中设置客户组ID并教导Mage_SalesRule_Model_Observer-> addProductAttributes来解决此问题。
Melvyn 2014年

2
刚看到这个。我投票决定重新开放。谢谢梅尔文。
musicliftsme 2015年

0

你可以用

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

它适用于Magnto Enterprise版本。1.14.2.4

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.