0

我可以使用 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'

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

4

1 回答 1

-1

见我之前的帖子:

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 将进行 OR 运算。

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

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

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

echo $collection->getSelect()->__toString();
于 2012-09-19T09:54:14.090 回答