Ricerca…


Parametri

Parametro Dettagli
$ addFieldToFilter ( $ campo , $ condizione = null) {string} Il campo che stiamo aggiungendo al filtro.
$ addFieldToFilter ($ campo, $ condizione = null ) {misto} La definizione del filtro che useremo.
addAttributeToFilter ( $ attr , $ condizione = null, $ join = 'inner') {string} Il campo che stiamo aggiungendo al filtro.
addAttributeToFilter ($ attr, $ condizione = null , $ join = 'inner') {misto} La definizione del filtro che useremo.
addAttributeToFilter ($ attr, $ condizione = null, $ join = 'inner' ) {('inner', 'left')} Il tipo di join SQL da utilizzare quando si entra nella tabella EAV.

Osservazioni

Argomenti di confronto dei filtri

Magento offre anche un modo flessibile di filtraggio utilizzando anche operatori di confronto. Ecco una lista di operatori validi e la loro sintassi:

Tutti gli argomenti di confronto possono essere passati al secondo parametro dei addFieldToFielter() o addAttributeToFilter() .

$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Confronto Array di argomenti Snippet SQL risultante
È uguale a array ( "eq" => $ var) DOVE (`my_field` = $ var)
Non uguale array ( "neq" => $ var) DOVE (`my_field`! = $ Var)
Piace array ( "come" => $ var) DOVE (`my_field` LIKE $ var)
Non come array ( "Nlike" => $ var) DOVE (`my_field` NOT LIKE $ var)
È array ( "è" => $ var) DOVE (`my_field` IS $ var)
Nel array ( "a" => $ var) DOVE (`my_field` IN ($ var))
Non in array ( "nin" => $ var) DOVE (`my_field` NOT IN ($ var))
Nullo array ( "nullo" => true) DOVE (`my_field` È NULL)
Non nullo array ( "notnull" => true) DOVE (`my_field` NON È NULL)
Più grande di array ( "GT" => $ var) DOVE (`my_field`> $ var)
Meno di array ( "LT" => $ var) DOVE (`my_field` <$ var)
Maggiore o uguale array ( "gteq" => $ var) DOVE (`my_field`> = $ var)
Meno o uguale array ( "lteq" => $ var) DOVE (`my_field` <= $ var)
Trova nel set array ( "finset" => array ($ var)) DOVE (find_in_set ($ var, `mio_field`)
Da e a array ("from" => $ var1, "a" => $ var2) DOVE (`my_field`> = $ var1 AND` my_field` <= $ var2)

Collezioni di filtri

Magento ha un potente set di metodi per filtrare le collezioni. Dato che ci sono due tipi di oggetti che possono essere contenuti nelle collezioni, dobbiamo prima determinare quale tipo di dati stiamo lavorando prima di poterlo filtrare. Magento implementa un modello di dati EAV per entità come prodotti e categorie. C'è un diverso insieme di metodi da usare se stiamo filtrando una collezione di oggetti EAV.

In Magento, gli ordini non sono memorizzati come oggetti EAV. Ciò rende la raccolta ordini un buon esempio per il filtraggio di una raccolta di base.

$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');

Se osserviamo la collezione di prodotti, possiamo vedere che i prodotti sono memorizzati in un modello di dati EAV. Possiamo facilmente filtrare anche per attributi EAV.

$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);

Gestione di AND e OR nei filtri

Quando interrogiamo i nostri dati, spesso abbiamo bisogno di più di un filtro per ottenere il set di dati esatto che stiamo cercando. In SQL, gestiamo questo con le clausole AND e OR. Possiamo ottenere la stessa cosa con le collezioni.

Per aggiungere una clausola AND alla query, è sufficiente aggiungere un'altra chiamata al metodo. Questo aggiungerà il secondo filtro all'istruzione WHERE originale che lo unisce ad un AND.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku',array('like'=>'a%'))
        ->addFieldToFilter('sku',array('like'=>'%b'));

La clausola WHERE risultante sarà simile a questa:

WHERE (e.sku like 'a%') AND (e.sku like '%b')

Ora diciamo che vogliamo tutti gli skus che iniziano con 'a' O terminano con 'b'. Come aggiungiamo una clausola OR? Grazie alle collezioni di Magento, è abbastanza semplice. Aggiungiamo il filtro come un secondo elemento nell'array del filtro.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku', array(
            array('like'=>'a%'), 
            array('like'=>'%b')
        ));

Ora, la clausola WHERE risultante sarà simile a questa:

WHERE (((e.sku like 'a%') or (e.sku like '%b'))) 


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow