Magento addFieldToFilter Verwenden von vorhandenen Spalten zu filtern
-
19-08-2019 - |
Frage
Hypothetische Situation. Ich mag eine sales/order
Sammlung mit jeder Bestellung bevölkern / laden, wo die grand_total zum total_paid
gleich ist. Ich weiß, ich addFieldToFilter
verwenden können um einen bestimmten Wert zu filtern, aber ist es möglich, diese Methode zu verwenden, die von anderen Datenbankwerte zu filtern. Wenn nicht, gibt es ein Datenzugriffsobjekt in dem Magento-System, das dies ermöglicht.
$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
//????????
Das non-eav
SQL Konzept, das ich für mich zu erfassen ist:
SELECT * FROM Orders o WHERE o.total_paid = o.grand_total
Ist das möglich rein mit Objektmethode Anrufe zu tun, oder muss ich nachladen Filterung tun?
Wie andere ORM
Systeme behandeln das?
Lösung
Ich war für eine definitive Antwort auf diese warten, aber da nichts ist gekommen, bis ich könnte genauso gut teilen, was ich herausgefunden habe. Ich verfolgte addFieldToFilter und scheinbar jeder Wert, den Sie oben verwenden endet zitiert, so kann man nicht wirklich „Hack“ dies durch den Namen einer Spalte. In der Tat sehe ich keine Möglichkeit, dies zu tun, zumindest nicht in dieser Klasse.
Realistisch betrachtet denke ich, werden Sie mit nachladen Filterung gehen müssen, zumindest vorerst. Das ist natürlich die Definition von ineffizienten Code, aber dann wieder, wenn die Recheneffizienz eine Priorität war, würden Sie nicht in erster Linie mit Magento werden ...
Andere Tipps
Gerade hatte dies in einem meiner Projekte anzusprechen und über diese Frage kam, während für eine bessere Auflösung zu suchen. Mein Hack sieht wie folgt aus:
$orders = Mage::getModel('sales/order')->getCollection();
$orders->getSelect()
->where('total_paid=grand_total');
Es ärgert mich, dass eine solche grundlegende Funktionalität von Datenbanken, die von Magento ORM übersehen wird.