我可以使用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'
任何帮助将不胜感激。感谢
答案 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();