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;