Buscar..


Parámetros

Parámetro Detalles
$ addFieldToFilter ( $ field , $ condition = null) {string} El campo que estamos agregando al filtro.
$ addFieldToFilter ($ field, $ condition = null ) {mixed} La definición del filtro que usaremos.
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') {string} El campo que estamos agregando al filtro.
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') {mixed} La definición del filtro que usaremos.
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) {('inner', 'left')} El tipo de unión sql que se usará al unirse a la tabla EAV.

Observaciones

Argumentos de comparación de filtros

Magento también ofrece una forma flexible de filtrar utilizando operadores de comparación también. Aquí hay una lista de operadores válidos y su sintaxis:

Todos los argumentos de comparación se pueden pasar al segundo parámetro de los addFieldToFielter() o addAttributeToFilter() .

$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Comparación Matriz de argumentos Fragmento de SQL resultante
Es igual a array ("eq" => $ var) DONDE (`my_field` = $ var)
No es igual array ("neq" => $ var) DONDE (`my_field`! = $ Var)
Me gusta array ("like" => $ var) DONDE (`my_field` ME GUSTA $ var)
Diferente a array ("nlike" => $ var) DONDE (`my_field` NO ME GUSTA $ var)
Es array ("is" => $ var) DONDE (`my_field` IS $ var)
En array ("in" => $ var) DONDE (`my_field` IN ($ var))
No en array ("nin" => $ var) DONDE (`my_field` NO EN ($ var))
Nulo array ("null" => true) DONDE (`my_field` ES NULL)
No nulo array ("notnull" => true) DONDE (`my_field` NO ES NULO)
Mas grande que array ("gt" => $ var) DONDE (`my_field`> $ var)
Menos que array ("lt" => $ var) DONDE (`my_field` <$ var)
Mayor que o igual array ("gteq" => $ var) DONDE (`my_field`> = $ var)
Menor o igual array ("lteq" => $ var) DONDE (`my_field` <= $ var)
Encontrar en set array ("finset" => array ($ var)) DONDE (find_in_set ($ var, `my_field`)
Desde y hacia array ("from" => $ var1, "to" => $ var2) DONDE (`my_field`> = $ var1 Y` my_field` <= $ var2)

Filtrando colecciones

Magento tiene un poderoso conjunto de métodos para filtrar colecciones. Como hay dos tipos de Objetos que pueden estar contenidos en colecciones, primero debemos determinar con qué tipo de datos estamos trabajando antes de poder filtrarlos. Magento implementa un modelo de datos EAV para entidades como productos y categorías. Existe un conjunto diferente de métodos a utilizar si estamos filtrando una colección de Objetos EAV.

En Magento, los pedidos no se almacenan como objetos EAV. Esto hace que la colección de pedidos sea un buen ejemplo para filtrar una colección básica.

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

Si observamos la colección de productos, podemos ver que los productos están almacenados en un modelo de datos EAV. También podemos filtrar fácilmente por atributos de EAV.

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

Manejo de ANDs y ORs en Filtros

Cuando consultamos nuestros datos, a menudo necesitamos más de un filtro para obtener el conjunto de datos exacto que estamos buscando. En SQL, manejamos esto con cláusulas AND y OR. Podemos lograr lo mismo con las colecciones.

Para agregar una cláusula AND a su consulta, simplemente agregue otro método de llamada. Esto agregará el segundo filtro a la declaración WHERE original que lo une con un AND.

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

La cláusula WHERE resultante se verá así:

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

Ahora digamos que queremos que todos los skus que comiencen con 'a' O terminen con 'b'. ¿Cómo agregamos una cláusula OR? Gracias a las colecciones de Magento, es bastante sencillo. Añadimos el filtro como un segundo elemento en la matriz de filtros.

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

Ahora, la cláusula WHERE resultante se verá así:

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow