Você provavelmente conhece o método addAttributeToFilter do Magento, usado para fazer filtro nas collections. Esse método adiciona uma condição WHERE da consulta SQL permitindo filtrar a collection por condições personalizadas.
Nesse post vamos mostrar como utilizar os filtros existentes para melhorar suas consultas tais como greater than, less than, greater than and equal to, less than and equal to, not equal, like, not like, is not null, is null, equal to.
Para esse exemplo vamos usar uma collection de produtos para aplicar os filtros.
$products = Mage::getModel(‘catalog/product’)->getCollection();
O primeiro operador que veremos é o eq “Igual”. Operador padrão, não há necessidade de ser informado.
Veja como utilizá-lo:
$products->addAttributeToFilter(‘status’, array(‘eq’ => 1)); // Usando o operador eq.
$products->addAttributeToFilter(‘status’, 1); // Sem o operador eq.
Diferente – neq:
$products->addAttributeToFilter(‘sku’, array(‘neq’ => ‘my-sku’));
Filtra todos os produtos que o sku é diferente de “my-sku”.
Like:
$products->addAttributeToFilter(‘sku’, array(‘like’ => ‘UX%’));
O porcentagem (%) significa – Qualquer caractere a partir da posição especificada. Nesse caso, que comecem com UX.
Exemplo:
Que termine com os caracteres “UX”:
$products->addAttributeToFilter(‘sku’, array(‘like’ => ‘%UX’));
Que contenha os caracteres “UX”:
$products->addAttributeToFilter(‘sku’, array(‘like’ => ‘%UX%’));
Not Like – nlike:
$products->addAttributeToFilter(‘sku’, array(‘nlike’ => ‘UX%’));
Filtra todos os produtos que não contenham o sku começando com os caracteres “UX”
In – in:
$products->addAttributeToFilter(‘id’, array(‘in’ => array(1,4,98)));
Filtra produtos que o ID seja um dos passados como parâmetro.
Not In – nin:
$products->addAttributeToFilter(‘id’, array(‘nin’ => array(1,4,98)));
Esse faz o inverso do operador in. Filtra todos os produtos cujo ID não seja igual aos passados como parâmetro.
NULL – null:
$products->addAttributeToFilter(‘description’, array(‘null’ => true));
Filtra os produtos que a descrição seja nula.
Not NULL – notnull:
$products->addAttributeToFilter(‘description’, array(‘notnull’ => true));
Filtra os produtos que a descrição não seja nula.
Greater Than – gt – Maior do que:
$products->addAttributeToFilter(‘id’, array(‘gt’ => 5));
Filtra os produtos que o ID seja maior do que 5.
Less Than – lt – Menor do que:
$products->addAttributeToFilter(‘id’, array(‘lt’ => 5));
Filtra os produtos que o ID seja menor do que 5.
Greater Than or Equals To- gteq – Maior ou igual:
$products->addAttributeToFilter(‘id’, array(‘gteq’ => 5));
Filtra os produtos que o ID seja maior ou igual a 5.
Less Than or Equals To – lteq – Menor ou igual:
$products->addAttributeToFilter(‘id’, array(‘lteq’ => 5));
Filtra os produtos que o ID seja menor ou igual a 5.
Para visualizar a query SQL realizada basta utilizar o método “getSelect”:
echo $products->getSelect();
Veja abaixo um exemplo que contém todos os filtros:
$products_collection = Mage::getModel(‘catalog/product’)->getCollection()
->addAttributeToSelect(‘*’)
->addAttributeToFilter(‘entity_id’, array(‘in’ => array(5114,7138,7157,7231,7343,7363))) // IN
->addAttributeToFilter(‘entity_id’, array(‘nin’ => array(1111,2222,3333))) // NOT IN
->addAttributeToFilter(‘entity_id’, array(‘gt’ => 1000)) // greater than >
->addAttributeToFilter(‘entity_id’, array(‘lt’ => 9999)) // less than <
->addAttributeToFilter(‘entity_id’, array(‘gteq’ => 1000)) // greater than and equal to >=
->addAttributeToFilter(‘entity_id’, array(‘lteq’ => 9999)) // less than and equal to <=
->addAttributeToFilter(‘sku’, array(‘neq’ => ‘12345’)) // not equal
->addAttributeToFilter(‘name’, array(‘like’ => ‘%of%’)) // LIKE
->addAttributeToFilter(‘name’, array(‘nlike’ => ‘aaaa%’)) // NOT LIKE
->addAttributeToFilter(‘name’, array(‘notnull’ => true)) // IS NOT NULL
->addAttributeToFilter(‘description’, array(‘null’ => true))// IS NULL
->addAttributeToFilter(‘status’, array(‘eq’ => 1)) // equal to
->addAttributeToFilter(‘visibility’, 4) // equal to
->load();
echo $products_collection->getSelect(); //Exibe a query SQL executada.
Iterando pela collection e exibindo alguns dados do produto:
foreach($products_collection as $product) {
echo “Produto: “ . $product->getName() . “<br>”;
echo “Sku: “ . $product->getSku() . “<br>”;
echo “Preço: ” . $product->getPrice() . “<br>”;
echo “URL: ” . $product->getProductUrl(). “<br>”;
}
Espero que tenham gostado, qualquer dúvida, crítica ou sugestão, deixe um comentário.