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'))) 


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow