SQL Abfragen in Magento: addAttributeToFilter

addAttributeToFilter ist eine Funktion, mit welcher man geschickte Abfragen an den Produktkatalog stellen kann. In Kurzform: Es beeinflusst den WHERE Anteil der SQL-Query:

$afterSalesSpecialOffer = Mage::getResourceModel('catalogsearch/advanced_collection')
                ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
                ->addMinimalPrice()
                ->addTaxPercents()
                ->addStoreFilter()
                ->addAttributeToFilter('status', array('in'=>1));
    
    $todayDate = date('m/d/y');
    $tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y'));
    $tomorrowDate = date('m/d/y', $tomorrow);
                
    $afterSalesSpecialOffer->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
                    ->addAttributeToFilter('special_to_date', array('or'=> array(
                    0 => array('date' => true, 'from' => $tomorrowDate),
                    1 => array('is' => new Zend_Db_Expr('null')))
                    ), 'left'); 

Diese Abfrage hat zum Beispiel als Ergebnis alle Produkte, welche aktuell im Angebot sind. Dabei wird auch der Gültigkeitszeitraum des Angebots berücksichtigt.

Folgen Abfragebedingungen sind dabei möglich.

Gleich: eq

$_products->addAttributeToFilter('status', array('eq' => 1));

Nicht Gleich: neq

$_products->addAttributeToFilter('status', array('neq' => 1));

Ähnlich : like

$_products->addAttributeToFilter('sku', array('like' => '1%')); // Alle Produkte deren SKU mit 1 beginnen

Nicht Ähnlich: nlike

$_products->addAttributeToFilter('sku', array('nlike' => '1%')); // Alle Produkte deren SKU nicht mit 1 beginnen

Einer von: in

$_products->addAttributeToFilter('sku', array('in' => array(1,2,3))); // Produkte mit der SKU 1,2 oder 3

nicht Einer von: nin

$_products->addAttributeToFilter('sku', array('like' => array(1,2,3))); // Alle Produkte ausser mit der SKU 1,2 oder 3

ist nicht gesetzt NULL: null

$_products->addAttributeToFilter('sku', 'null'); // Alle Produkte ohne SKU; Darf eigentlich nicht vorkommen

ist gesetzt: notnull

$_products->addAttributeToFilter('sku', 'notnull'); // Alle Produkte mit SKU;

größer als: gt

$_products->addAttributeToFilter('entity_id', array('gt' => 100)); 

kleiner als: lt

$_products->addAttributeToFilter('entity_id', array('lt' => 100)); 

größer oder gleich als: gteg

$_products->addAttributeToFilter('entity_id', array('gteq' => 100));

kleiner oder gleich als: lteq

$_products->addAttributeToFilter('entity_id', array('lteq' => 100));

Diesen Beitrag drucken