Como criar uma condição múltipla em addAttributeToFilter?
Eu quero resultado em uma consulta SQL como esta (imagem em anexo):
WHERE ((`e`.`news_from_date` > '2013-09-12') OR (`e`.`news_to_date` < '2013-09-12'))
AND ((((`e`.`special_price` IS NULL))) OR (((`e`.`special_price` IS NOT NULL)) AND ((`e`.`special_from_date` < '2013-09-12') OR (`e`.`special_to_date` > '2013-09-12'))))
$collection->addAttributeToFilter('special_price', array('null'=>'special_price'), 'left');
Obrigado
Respostas:
Você deve poder combinar a maioria dessas técnicas para criar a consulta desejada. Para tabelas de vendas, você provavelmente usará
addFieldToFilter
- masZend_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:Então, a partir disso, podemos construir o seguinte:
Isso produzirá uma
WHERE
cláusula do formato: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:
Zend_Db_Expr:
Para construções muito mais complicadas, você pode criar sua própria cláusula where usando
Zend_Db_Expr
. Por exemplo :Fonte :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884
fonte
Zend_Db_Expr
:$collection->getSelect()->where(new Zend_Db_Expr("(CONDITION_1 OR (CONDITION_2 AND (CONDITION_3 OR CONDITION_4)))"));
name
,altnernate_name
,description
) e gostaria de saber quando um resultado é por causa dodescription
atributo.Se você deseja incluir AND com a combinação de OR ,
fonte
Ou condição usando addFieldToFilter
fonte