Question

Situation hypothétique. Je souhaite remplir / charger une collection sales / order avec chaque commande où le grand_total est égal au total_paid . Je sais que je peux utiliser addFieldToFilter pour filtrer par une valeur spécifique, mais est-il possible d'utiliser cette méthode pour filtrer par d'autres valeurs de base de données. Sinon, y a-t-il un objet d'accès aux données dans le système Magento qui le permet?

$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
//????????

Le concept SQL non-eav que je saisis est:

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

Est-ce possible uniquement avec des appels de méthode objet ou dois-je effectuer un filtrage post-chargement?

Comment les autres systèmes ORM gèrent-ils cela?

Était-ce utile?

La solution

J'attendais une réponse définitive à cette question, mais vu que rien ne se produisait, je pourrais tout aussi bien partager ce que j'ai découvert. J'ai tracé addFieldToFilter et, apparemment, chaque valeur que vous utilisez finit par être citée, de sorte que vous ne pouvez pas vraiment "bidouiller". ceci en utilisant le nom d'une colonne. En fait, je ne vois aucun moyen de le faire, du moins pas dans cette classe.

En réalité, je pense que vous aurez besoin d'utiliser le filtrage post-charge, du moins pour le moment. C’est bien entendu la définition même du code inefficace, mais si l’efficacité informatique était une priorité, vous n’utiliseriez pas Magento en premier lieu ...

Autres conseils

Il me suffisait de résoudre ce problème dans l'un de mes projets et j'ai trouvé cette question tout en cherchant une meilleure résolution. Mon hack ressemble à ceci:

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

Cela me gêne qu'une telle fonctionnalité de base de bases de données soit ignorée par l'ORM de Magento.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top