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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top