Utilisation de addFieldToFilter de Magento pour filtrer par colonnes existantes
-
19-08-2019 - |
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?
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.