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