2009-03-16 6 views
1

Hypothetische Situation. Ich möchte eine sales/order Sammlung mit jeder Bestellung auffüllen/laden, wo das grand_total gleich total_paid ist. Ich weiß, dass ich addFieldToFilter verwenden kann, um nach einem bestimmten Wert zu filtern, aber ist es möglich, diese Methode zu verwenden, um nach anderen Datenbankwerten zu filtern. Wenn nicht, gibt es ein Datenzugriffsobjekt im Magento-System, das dies zulässt.Verwenden von Magento addFieldToFilter, um nach vorhandenen Spalten zu filtern

$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 

dies möglich ist rein mit Objektmethode Anrufe zu tun, oder muss ich Filter nachladen tun?

Wie andere ORM Systeme damit umgehen?

Antwort

4

ich für eine definitive Antwort auf diese warte, aber da nichts gekommen ist, bis ich könnte genauso gut teilen, was ich herausgefunden habe. Ich verfolgte addFieldToFilter und scheinbar jeder Wert, den Sie verwenden, endet zitiert, so dass Sie nicht wirklich "hacken" können, indem Sie den Namen einer Spalte verwenden. In der Tat sehe ich keinen Weg, dies zu tun, zumindest nicht in dieser Klasse.

Realistisch betrachtet denke ich, werden Sie mit nachladen Filterung gehen müssen, zumindest vorerst. Dies ist natürlich genau die Definition von ineffizientem Code, aber wenn die rechnerische Effizienz eine Priorität war, würden Sie Magento nicht in erster Linie verwenden ...

+0

Ja, ich vermute, es gibt etwas (in einer anderen Methode/Klasse vielleicht), das würde Sie damit umgehen lassen. ORMs sind großartig, undokumentierte ORMs nicht so sehr. –

1

Ich musste das nur in einem meiner Projekte ansprechen kam auf diese Frage bei der Suche nach einer besseren Auflösung. 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.

+0

Ich muss die Auftragssammlung mit einem benutzerdefinierten Feld (sales_code) filtern. Aber es durch Fehler "Spalte nicht gefunden" –

Verwandte Themen