Magento ist eine typische Hassliebe. Ein paar Sachen sind super und andere gehören eindeutig in die Kategorie W.T.F.
So zum Beispiel auch die Arbeit mit Magento Collections.
Als Magentoentwickler sind wir es ja gewohnt, das uns das Model einfach eine Collection gibt, mit der wird dann nach Lust und Laune weiter arbeiten können.
<?php
$collection = Mage::getModel('sales/order')->getCollection();
Ebenso bequem lassen sich einfache Standardfilter vor dem Laden setzen, z.B. wenn wir nur Orders mit der StoreId = 42 haben wollen.
<?php
$collection->addFilter('store_id', 42);
So weit, so gut… Nun könnte man als verrückter Entwickler nun auch plötzlich auf die Idee kommen, nur Elemente laden zu wollen, deren StoreId größer oder kleiner ist.
Intuitiv hätte ich jetzt Konstrukte wie bei quoteInto() erwartet
<?php
$collection->addFilter('store_id < ?', 42);
oder vielleicht auch noch einen dritten Parameter der den Vergleichsoperator bekommt
<?php
$collection->addFilter('store_id', 42, '<');
Aber nichts dergleichen ist im Angebot. Dafür aber ein, zumindest für mich, wirres Konstrukt.
<?php $collection->addFilter(null, 'id >' . $this->getLastId(), 'string');
Der erste Parameter $field fliegt raus, bzw. kann leer übergeben werden und dafür bauen wir uns unsere Bedingung selber zusammen und übergeben sie an den zweiten Parameter $value, was in der Folge schon fast wieder einen Sinn ergibt, weil wir dem dritten Parameter $type den Wert string (als String) zuweisen.
Für mich eindeutig W.T.F.! Liebe Entwickler bei Varien, ich habe keine Ahnung was die Quelle eurer Inspiration und Kreativität ist, aber versucht es doch mal mit etwas anderem.

14.10.2010 um 07:27 Uhr
Hi Daniel,
was spricht gegen die Methode addFieldToFilter oder addAttributeToFilter?
Diesen Methoden kannst du eine Condition übergeben.
Die Conditions werden dann intern über _getConditionSql in der Klasse Varien_Data_Collection_Db umgesetzt.
Gruß
Matthias
14.10.2010 um 07:48 Uhr
Es geht mir dabei eher darum, dass Magento sowas seltsames anbietet, wenn es doch die beiden anderen Methoden gibt.
14.10.2010 um 08:24 Uhr
Kleiner Hinweis am Rande: Varien gibts nicht mehr, die heissen seit einiger Zeit Magento Inc.
14.10.2010 um 08:31 Uhr
Und was hat sich außer dem Namen noch geändert?
14.10.2010 um 12:49 Uhr
Nix, der Code bleibt so schlecht wie er war
15.10.2010 um 10:20 Uhr
Hallo,
korrekt würder der > Filter mit
$collection->addFieldToFilter(‘store_id’, array(‘gt’ => 42))
der Collection hinzugefügt.
Die Syntax für die Filter (gt, lt, notnull, …) sind zu finden in
Varien_Data_Collection_Db in der Methode _getConditionSql()
Gruß,
Vinai