Não foi possível carregar o objeto de cotação

24

O sales/quoteobjeto funciona de maneira diferente de outros objetos ao carregar? Veja o seguinte ..

Trabalho:

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

Não funciona:

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

Ambos $quotesão da classe correta Mage_Sales_Model_Quote,.

musicliftsme
fonte
com 5 votos positivos, não entendo como essa pergunta é marcada como fora de tópico e não reproduzível. esse problema pode ser reproduzido. Basta carregar uma cotação na página de visualização de pedidos de front-end e na página de visualização de pedidos de administrador. Funcionará de maneira diferente. A resposta do webbiedave funciona perfeitamente nesse cenário.
Reena Parekh

Respostas:

29

Defina a loja primeiro:

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

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

Não, Mage_Sales_Model_Quoteé como todos os outros modelos baseados em db. Você faz algo errado. Talvez codifique o $quoteId? Tem certeza de que está correto? Ambos os códigos devem funcionar.

Fabian Blechschmidt
fonte
Sim, eu tentei usar um inteiro no lugar de $quoteId. Estou começando a pensar que talvez $quoteIdprecise ser uma string ou algo assim. Meu script está em execução no momento, então vou verificar amanhã.
21314 Musliftsme
Hmm, também não funciona em outra instância, com o ID da entidade de cotação gravado em seqüência de caracteres ou inteiro. Fabian, você já tentou o código que eu publiquei?
musicliftsme
1
Enquanto o modelo é como outros modelos de banco de dados, o modelo de recurso Mage_Sales_Model_Resource_Quote implementa um filtro codificado no código da loja por _getLoadSelect (). A maneira de contornar isso é usar Mage::getResourceSingleton('sales/quote')->loadByIdWithoutStore($quote, $order->getQuoteId()). Agora, se eu puder dizer para NÃO carregar um objeto completo do cliente e iniciar uma sessão, sou um campista feliz.
Melvyn
3
Para quem enfrenta o mesmo: é o SalesRule / Model / Observer.php que instancia uma sessão no carregamento de itens de cotação. Apenas para chegar ao customerGroupId. Resolvi isso reescrevendo Sales_Model_Quote e definindo o ID do grupo de clientes em Mage :: registry e ensinando Mage_SalesRule_Model_Observer-> addProductAttributes a olhar primeiro para lá.
Melvyn
2
Só vi isso. Eu votei para reabrir. Obrigado Melvyn.
Musicliftsme
0

Você poderia usar

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

Funciona no Magnto Enterprise ver. 1.14.2.4

Blaz
fonte