Pergunta

situação

hipotético. Quero preencher / carregar uma coleção sales/order com cada ordem onde o grand_total é igual ao total_paid. Eu sei que eu posso usar addFieldToFilter para filtrar por um valor específico, mas é possível usar este método para filtrar por outros valores de banco de dados. Se não, há qualquer objeto de acesso de dados no sistema de Magento que permite isso.

$orders = Mage::getModel('sales/order');
$orders = $orders->getCollection();
$orders->addFieldToFilter('total_paid',Array('eq'=>30));  //would find all the orders that were 30 
//syntax to find all the orders whose total_paid value is equal to it's grand_total attribute
//????????

O conceito non-eav SQL Eu estou agarrando para é:

SELECT * FROM Orders o WHERE o.total_paid = o.grand_total

Esta é possível fazer puramente com chamadas de método de objeto, ou que eu preciso para fazer a filtragem de pós-carga?

Como outros sistemas ORM lidar com isso?

Foi útil?

Solução

Eu estava esperando por uma resposta definitiva para isso, mas vendo como nada de vir para cima assim como eu poderia compartilhar o que eu descobri. Tracei addFieldToFilter e, aparentemente, todos os valores que você usa extremidades até citou então você não pode realmente "hack" isso usando o nome de uma coluna. Na verdade eu não vejo nenhuma maneira de fazer isso, pelo menos não dentro desta classe.

Na realidade eu acho que você precisa ir com filtragem pós-carga, pelo menos por agora. Isto, obviamente, é a própria definição de código ineficiente, mas, novamente, se a eficiência computacional era uma prioridade, você não estaria usando Magento em primeiro lugar ...

Outras dicas

Apenas teve que resolver isso em um dos meus projetos e me deparei com esta questão durante a pesquisa para uma melhor resolução. Meus olhares de hackers como esta:

$orders = Mage::getModel('sales/order')->getCollection();
$orders->getSelect()
       ->where('total_paid=grand_total');

Irrita-me que uma funcionalidade tal básica de bancos de dados é ignorado por ORM do Magento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top