¿Cómo crear una condición múltiple en addAttributeToFilter?
Quiero resultado en una consulta SQL como esta (imagen adjunta):
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');
Gracias
Respuestas:
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
, peroZend_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:Entonces, a partir de eso podemos construir lo siguiente:
Esto generará una
WHERE
cláusula del formato: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:
Zend_Db_Expr:
Para construcciones mucho más complicadas, puede construir su propia cláusula where utilizando
Zend_Db_Expr
. Por ejemplo :Fuente :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884
fuente
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
) y me gustaría saber cuando un resultado es debido aldescription
atributo.Si desea incluir AND con la combinación de OR, entonces
fuente
O condición usando addFieldToFilter
fuente