Passa ai contenuti principali

Sql condizionale in Magento

Per parametrizzare la query o la collection in fase di estrazione dati, ossia aggiungere null - diverso da - >= etc.., è sufficiente utilizzare addFieldToFilter e addAttributeToFilter.

Esempio:

$collection= Mage::getModel('mdg_giftregistry/entity')
                ->getCollection()
                ->addFieldToFilter('customer_id', $customer->getId());

In questo caso si richiede di effettuare un filtro con il campo customer_id ugale all'id del customer.

Mage::getModel('mdg_giftregistry/entity')->getCollection() restituisce un oggetto Varien_Data_Collection_DB dove il metodo addFieldToFIlter è così definito:

 /**
     * Add field filter to collection
     *
     * @see self::_getConditionSql for $condition
     *
     * @param   string|array $field
     * @param   null|string|array $condition
     *
     * @return  Mage_Eav_Model_Entity_Collection_Abstract
     */
    public function addFieldToFilter($field, $condition = null)

Il parametro $condition accetta un array con i relativi test da effettuare il campo $field. Le condizioni specificabili sono contenute nel metodo protected function _getConditionSql($fieldName, $condition) e sono:

     * Build SQL statement for condition
     *
     * If $condition integer or string - exact value will be filtered ('eq' condition)
     *
     * If $condition is array - one of the following structures is expected:
     * - array("from" => $fromValue, "to" => $toValue)
     * - array("eq" => $equalValue)
     * - array("neq" => $notEqualValue)
     * - array("like" => $likeValue)
     * - array("in" => array($inValues))
     * - array("nin" => array($notInValues))
     * - array("notnull" => $valueIsNotNull)
     * - array("null" => $valueIsNull)
     * - array("moreq" => $moreOrEqualValue) 
     * - array("gt" => $greaterValue)
     * - array("lt" => $lessValue)
     * - array("gteq" => $greaterOrEqualValue)
     * - array("lteq" => $lessOrEqualValue)
     * - array("finset" => $valueInSet)
     * - array("regexp" => $regularExpression)
     * - array("seq" => $stringValue)
     * - array("sneq" => $stringValue)

Ora vediamo come utilizzare praticamente i filtri:

// Is Equal To (eq)
$collection->addFieldToFIlter('status', array('eq' => 1));

// Is Not Equal To (neq)
$collection->addFieldToFIlter('sku', array('neq' => 'test-product'));

// Greater Than (gt)
$collection->addFieldToFIlter('price', array('gt' => 10.05));
 

// Less Than (lt)
$collection->addFieldToFIlter('price', array('lt' => 15.09));
 

// Greater Than or Equal To (gteq)
$collection->addFieldToFIlter('price', array('gteq' => 2.29));

// Less Than or Equal To (lteq)
$collection->addFieldToFIlter('price', array('lteq' => 5.44));

// Contains (like) - also uses % wildcards
$collection->addFieldToFIlter('sku', array('like' => 'test-product%'));

// Does Not Contain (nlike) - also uses % wildcards
$collection->addFieldToFIlter('sku', array('nlike' => 'test-product%'));

// In Array (in)
$collection->addFieldToFIlter('id', array('in' => array(1,3,12)));

// Not In Array (nin)
$collection->addAttributeToFilter('id', array('nin' => array(1,2,12)));

// Is NULL (null)
$collection->addFieldToFIlter('description', 'null');

// Is Not NULL (notnull)
$collection->addFieldToFIlter('description', 'notnull');

 

***  getSelect() e join() restituiscono un oggetto select, mentre addStoreFilter() e  addIsActiveFilter() restituiscono la collezione.

Commenti

Post popolari in questo blog

install language on osTicket

this simple guide aims you to install and configure your language on osTicket i written this guide based on forum post http://osticket.com/forum/discussion/76252/installing-language-pack

Droidcon Italia

A Febbraio arriva in Italia il Droidcon! Questo il programma della giornata: 6 febbraio 8:30 – 9:15 Registration 9:15 – 9:50 Welcome 9:50 – 13:00 Conferences 13:00 – 14:00 Lunch 14:00 – 18:00 Conferences / Barcamp 7 febbraio 9:50 – 13:00 Conferences / Workshops 13:00 – 14:00 Lunch 14:00 – 18:00 Conferences / Workshops 18:00 – 18:30 Closing Questo il link del Droidcon   http://it.droidcon.com/2014/ A breve maggiori informazioni sui talk, hackathon, codelab :)

la migliore home di un e-commerce

la principale caratteristica della home page è che può essere assimilata alla vetrina di un negozio concreto come l'obiettivo di una vetrina di un negozio è quello di attirare l'attenzione di potenziali clienti per spingerli ad entrare nel negozio, così la home page di un e-commerce deve spingere i visitatori a esplorare il sito però dobbiamo anche sottolineare una differenza: se una vetrina di un negozio è sempre il punto di contatto con potenziali clienti, in un e-commerce non sempre la prima pagina è il punto di ingresso dell'e-commerce perché un motore di ricerca restituisce di solito le pagine del prodotto e non l'home page dell'e-commerce come abbiamo detto la vetrina di un negozio e disegnata per attirare l'attenzione di clienti potenziali che passano davanti, nell'e-commerce invece i clienti hanno effettuato prima un'azione per visitare il sito così come possiamo creare differenti landing page per le campagne pubblicitarie che realizziamo,...