Condicionales para addAttributeToFilter en Magento 2

Condicionales para addAttributeToFilter en Magento 2

Cuando queremos recoger datos de base de datos a través de colecciones EAV (tanto en Magento 1 como en Magento 2), solemos usar el método addAttributeToFilter, para filtrar con distintas condiciones que queramos. Este método es el equivalente a utilizar un WHERE en una consulta de SQL.

Muchas veces nos preguntamos como escribir o usar un operador a través de este método, por eso aquí os dejo un resumen de los distintos operadores y su equivalencia en SQL.

Por defecto cuando usamos el método addAttributeToFilter es de la siguiente manera:

$coleccion->addAttributeToFilter('nombre', 'Pepe');

Si no añadimos ningún operador, y usamos el método tal cual, el operador usado por defecto es = (igual).

Por lo tanto esto sería en SQL algo así como:

SELECT *
FROM .....
WHERE nombre = 'Pepe';

Para usar cualquier otro operador que no sea = debemos especificarlo.

EQUALS (eq)

// En este caso se puede usar de dos formas, ya que el método usa este operador por defecto

$coleccion->addAttributeToFilter('nombre', 'Pepe');
$coleccion->addAttributeToFilter('nombre', ['eq' => 'Pepe']);
SELECT *
FROM .....
WHERE nombre = 'Pepe';

NOT EQUALS (neq)

$coleccion->addAttributeToFilter('nombre', ['neq' => 'Pepe']);
SELECT *
FROM .....
WHERE nombre != 'Pepe';

LIKE (like)

$coleccion->addAttributeToFilter('nombre', ['like' => 'Pep%']);
SELECT *
FROM .....
WHERE nombre LIKE 'Pep%';

NOT LIKE (like)

$coleccion->addAttributeToFilter('nombre', ['nlike' => 'Pep%']);
SELECT *
FROM .....
WHERE nombre NOT LIKE 'Pep%';

IN (in)

$coleccion->addAttributeToFilter('id', ['in' => [1, 20, 45, 77]]);
SELECT *
FROM .....
WHERE id IN (1, 20, 45, 77);

NOT IN (nin)

$coleccion->addAttributeToFilter('id', ['nin' => [1, 20, 45, 77]]);
SELECT *
FROM .....
WHERE id NOT IN (1, 20, 45, 77);

NULL (null)

$coleccion->addAttributeToFilter('nombre', ['null' => true]);
SELECT *
FROM .....
WHERE nombre IS NULL;

NOT NULL (notnull)

$coleccion->addAttributeToFilter('nombre', ['notnull' => true]);
SELECT *
FROM .....
WHERE nombre IS NOT NULL;

GREATER THAN (gt)

$coleccion->addAttributeToFilter('id', ['gt' => 5]);
SELECT *
FROM .....
WHERE id > 5;

GREATER THAN OR EQUAL (gteq)

$coleccion->addAttributeToFilter('id', ['gteq' => 5]);
SELECT *
FROM .....
WHERE id >= 5;

LESS THAN (lt)

$coleccion->addAttributeToFilter('id', ['lt' => 5]);
SELECT *
FROM .....
WHERE id < 5;

LESS THAN OR EQUAL (lteq)

$coleccion->addAttributeToFilter('id', ['gteq' => 5]);
SELECT *
FROM .....
WHERE id <= 5;

Jose Luis
Jose Luis
Magento 2 Certified Developer