Debería poder combinar la mayoría de estas técnicas para crear la consulta que desee. Para las tablas de ventas, probablemente usará addFieldToFilter
, pero Zend_Db_Expr
es probable que sea el camino de menor resistencia para usted:
addAttributeToFilter:
De acuerdo con el Wiki de Magento : Al crear paréntesis que tengan OR
condiciones, puede hacer lo siguiente:
Si se pasa una matriz pero no se especifica ningún código de atributo, se interpretará como un grupo de condiciones OR que se procesarán de la misma manera.
Entonces, a partir de eso podemos construir lo siguiente:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Esto generará una WHERE
cláusula del formato:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
En el caso de que el modelo esté directamente vinculado a una tabla DB, se requiere lo siguiente para aplicar condicionales a la columna de la base de datos por su nombre:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Para construcciones mucho más complicadas, puede construir su propia cláusula where utilizando Zend_Db_Expr
. Por ejemplo :
$collection->getSelect()->where(new Zend_Db_Expr("(e.created_at > '2013-01-01 00:00:00' OR e.created_at <'2012-01-01 00:00:00)"));
Fuente :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884