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

Ubuntu: La propria installazione di python è danneggiata. Correggere il collegamento simbolico «/usr/bin/python».

Questa è un problema, soprattutto se si vuole aggiornare la distribuzione.+ Dì la verità: hai pacioccato con le versioni di python vero? Volevi usare la 3.5 e non 2.7 e così hai aggiunto alternatives o manipolato il symlink. No? io si. Così in fase di aggiornamento mi sono bloccato. Allora per risolverlo ecco la soluzione: elimina tuttle le eventuali alternative : sudo update-alternatives –remove-all python crea il symlink alla 2.7 sudo ln -s /usr/bin/python3.5 /usr/bin/python aggiorna i permessi: sudo chmod 7777 /usr/bin/python Ora funziona tutto. La soluzione l’ho scovata qui: https://askubuntu.com/questions/448926/do-release-upgrade-python-install-is-corrupted