magento
Hur du filtrerar samlingar
Sök…
parametrar
Parameter | detaljer |
---|---|
$ addFieldToFilter ($ fältet, $ villkor = null) | {string} Fältet vi lägger till i filtret. |
$ addFieldToFilter ($ -fält, $ villkor = null ) | {mixed} Definitionen av det filter vi kommer att använda. |
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') | {string} Fältet vi lägger till i filtret. |
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') | {mixed} Definitionen av det filter vi kommer att använda. |
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) | {('inre', 'vänster')} Typen av sql-koppling som ska användas när du går med i EAV-tabellen. |
Anmärkningar
Filtrera jämförelsesargument
Magento erbjuder också ett flexibelt sätt att filtrera med jämförande operatörer också. Här är en lista över giltiga operatörer och deras syntax:
Alla jämförelsesargument kan överföras till den andra parametern för antingen addFieldToFielter()
eller addAttributeToFilter()
-metoderna.
$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Jämförelse | Argument Array | SQL-kod resulterar |
---|---|---|
jämlikar | array ( "eq" => $ var) | WHERE ("my_field" = $ var) |
Inte jämnlikt | array ( "neq" => $ var) | WHERE ("my_field"! = $ Var) |
Tycka om | array ( "like" => $ var) | WHERE ("my_field" LIKE $ var) |
Inte som | array ( "Nlike" => $ var) | VAR ("my_field" INTE Gillar $ var) |
Är | array ( "är" = var> $) | WHERE ("my_field" IS $ var) |
I | array ( "i" => $ var) | WHERE ("my_field" IN ($ var)) |
Inte i | array ( "nin" => $ var) | WHERE ("my_field" INTE IN ($ var)) |
Null | array ( "null" => true) | VAR ("mitt_fält" ÄR NULL) |
Inte noll | array ( "notnull" => true) | VAR ("mitt_fält" INTE NULL) |
Större än | array ( "gt" => $ var) | WHERE ("my_field"> $ var) |
Mindre än | array ( "lt" => $ var) | WHERE ("my_field" <$ var) |
Större än eller lika med | array ( "gteq" => $ var) | WHERE ("my_field"> = $ var) |
Mindre än eller lika | array ( "lteq" => $ var) | WHERE ("my_field" <= $ var) |
Hitta i set | array ( "finset" => array ($ var)) | WHERE (find_in_set ($ var, "my_field") |
Från och till | array ("från" => $ var1, "till" => $ var2) | VAR ("my_field"> = $ var1 OCH "my_field" <= $ var2) |
Filtrera samlingar
Magento har en kraftfull uppsättning metoder för att filtrera samlingar. Eftersom det finns två typer av objekt som kan ingå i samlingar, måste vi först bestämma vilken typ av data vi arbetar med innan vi kan filtrera den. Magento implementerar en EAV-datamodell för enheter som produkter och kategorier. Det finns en annan uppsättning metoder att använda om vi filtrerar en samling EAV-objekt.
I Magento lagras inte order som EAV-objekt. Detta gör ordersamlingen till ett bra exempel för att filtrera en grundsamling.
$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');
Om vi tittar på produktsamlingen kan vi se att produkterna lagras i en EAV-datamodell. Vi kan också enkelt filtrera efter EAV-attribut.
$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);
Hantera AND och OR i filter
När vi frågar våra data behöver vi ofta mer än ett filter för att få den exakta datauppsättningen vi letar efter. I SQL hanterar vi detta med AND- och OR-klausuler. Vi kan uppnå samma sak med samlingar.
För att lägga till en OCH-klausul till din fråga, lägg bara till ett annat metodsamtal. Detta kommer att lägga till det andra filtret till det ursprungliga WHERE-uttalandet och ansluta det till ett AND.
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku',array('like'=>'a%'))
->addFieldToFilter('sku',array('like'=>'%b'));
Den resulterande WHERE-klausulen kommer att se ut så här:
WHERE (e.sku like 'a%') AND (e.sku like '%b')
Låt oss nu säga att vi vill ha alla skidor som börjar med 'a' ELLER slutar med 'b'. Hur lägger vi till en OR-klausul? Tack vare Magentos samlingar är det ganska rakt fram. Vi lägger till filtret som ett andra element i filterfältet.
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku', array(
array('like'=>'a%'),
array('like'=>'%b')
));
Nu kommer den resulterande WHERE-klausulen att se ut så här:
WHERE (((e.sku like 'a%') or (e.sku like '%b')))