在Magento上使用OR条件加入AND条件

时间:2012-09-19 08:37:20

标签: magento boolean

我可以使用addFieldToFilter和addAttributeToFilter在Magento上运行AND和OR布尔条件。

但是,我很好奇如下所示实现更复杂的布尔条件:

WHERE (`sku > 5` AND `price` > '10') OR (`name` = 'books')

对于AND条件,我有

$collections = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')
->addFieldToFilter( 'sku', array('gt' => 5 )
->addFieldToFilter('price', array('gt' => 10);

转换为WHERE条件的第一个括号:

(`sku` > 5 AND `price` > 10)

我不知道如何从这里开始表达OR条件

`name` = 'books'

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:-1)

请参阅我之前的帖子:

complex boolean conditions on Magento

您可以通过传递数组来创建OR:

Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('price', array('gt' => 10))
->addAttributeToFilter(
    array(
        array('attribute'=>'firstname', 'like'=>'test%'),
        array('attribute'=>'lastname', 'like'=>'test%'),
    )
)

对addAttributeToFilter()的每次额外调用都将进行AND运算,但是firstname / lastname将被ORed。

如果您需要更复杂的select语句,您始终可以从集合中获取select对象并对查询执行调整。查看Varien_Db_Select以获取提示:)

$collection->getSelect()->join(..)->orWhere(..);  // etc

您甚至可以调试查询以查看它是否正常:

echo $collection->getSelect()->__toString();