Sätt villkor med addAttributeToFilter

När vi jobbar med modellerna och databasen i Magento så vill vi ofta kunna sätta villkor i where -satsen av SQL -frågan. Vi gör så från en ”product collection” instans med metoden ”addAttributeToFilter”.

Mage::getModel( 'catalog/product' )
    ->getCollection()
        ->addAttributeToFilter(
            'attribute',
            array( 'eq' => 'foo' ))
        ->load();

Svaret vi får tillbaka är en instans som fungerar som ett fält där var post är en produktmodell. Instansen kan således också loopas igenom som vanligt.

Om vi vill lägga till fler villkor så kallar vi helt enkelt på metoden igen.

Mage::getModel( 'catalog/product' )
    ->getCollection()
        ->addAttributeToFilter(
            'attribute_1',
            array( 'eq' => 'foo' ))
        ->addAttributeToFilter(
            'attribute_2',
            array( 'eq' => 'bar' ))
        ->load();

Detta skulle vara det samma som att säga att vi vill ha alla produkter som har attributen ”attribute_1” med värdet ”foo” och ”attribute_2” med värdet ”bar”.

Vill vi istället ha produkter efter villkoret ”attribute_1” med värdet ’foo’ eller ”attribute_2” med värdet ”bar” så skriver vi följande:

Mage::getModel( 'catalog/product' )
    ->getCollection()
        ->addAttributeToFilter(
            array(
                array( 'attribute' => 'attribute_1', 'eq' => 'foo' ),
                array( 'attribute' => 'attribute_2', 'eq' => 'bar' )));

OBS! ovanstående koder specificerar inte några fält i select -satsen vilket resulterar i att vi inte får någon direkt data tillbaka.
För att göra det så lägger vi till metoden ”addAttributeToSelect” på följande vis eller liknande:

Mage::getModel( 'catalog/product' )
    ->getCollection()
        ->addAttributeToSelect( '*' )
        ->addAttributeToFilter(
            'attribute',
            array( 'eq' => 'foo' ))
        ->load();

Operatorer

Listar nedan hur en del operatorer ser ut i Magento samt dess motsvarighet i SQL.

Magento SQL
eq =
neq !=
like LIKE
nlike NOT LIKE
in IN()
nin NOT IN()
is IS
null IS NULL
notnull IS NOT NULL
gt >
lt <
gteq >=
lteq <=
finset FIND_IN_SET()

Länkar

http://fishpig.co.uk/magento-tutorials/addattributetofilter-conditionals-in-magento