Você deve poder combinar a maioria dessas técnicas para criar a consulta desejada. Para tabelas de vendas, você provavelmente usará addFieldToFilter
- mas Zend_Db_Expr
é provavelmente o caminho de menor resistência para você:
addAttributeToFilter:
De acordo com o Magento Wiki : Ao criar parênteses com OR
condições, você pode fazer o seguinte:
Se uma matriz for passada, mas nenhum código de atributo especificado, ele será interpretado como um grupo de condições OR que serão processadas da mesma maneira.
Então, a partir disso, podemos construir o seguinte:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Isso produzirá uma WHERE
cláusula do formato:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
No caso em que o modelo está diretamente vinculado a uma tabela de banco de dados, é necessário o seguinte para aplicar condicionais à coluna do banco de dados por nome:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
Para construções muito mais complicadas, você pode criar sua própria cláusula where usando Zend_Db_Expr
. Por exemplo :
$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)"));
Fonte :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884