处理过滤器中的 AND 和 OR

当我们查询数据时,我们经常需要多个过滤器来获取我们正在寻找的确切数据集。在 SQL 中,我们使用 AND 和 OR 子句处理它。我们可以通过集合实现同样的目标。

要在查询中添加 AND 子句,只需添加另一个方法调用即可。这会将第二个过滤器附加到原始 WHERE 语句,并将其与 AND 连接。

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku',array('like'=>'a%'))
        ->addFieldToFilter('sku',array('like'=>'%b'));

生成的 WHERE 子句如下所示:

WHERE (e.sku like 'a%') AND (e.sku like '%b')

现在让我们说我们想要所有以’a’开头的 skus 以’b’结尾。我们如何添加 OR 子句?感谢 Magento 的系列,它非常直接。我们将过滤器添加为过滤器数组中的第二个元素。

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku', array(
            array('like'=>'a%'), 
            array('like'=>'%b')
        ));

现在,生成的 WHERE 子句将如下所示:

WHERE (((e.sku like 'a%') or (e.sku like '%b')))