Magento常用过滤筛选器

在讲magento筛选过滤器之前,先说一下调试SQL查询:

有两种方法调试加载在Magento集合时正在执行的查询。

// Method 1  
Mage::getModel('catalog/product')->getCollection()->load(true);  
  
// Method 2 (Quicker, Recommended)  
$collection = Mage::getModel('catalog/product')->getCollection();  
echo $collection->getSelect();  

方法1和方法2都是打印查询的,但各自有略微不同的方式。方法1,打印查询以及装载产品,而方法2将只查询对象转换为一个字符串(即会打印出的SQL语句)。第二种方法是肯定更好。!
Magento的集合实际上就是一个包含其它模型的模型,所以我们可以用Product集合来取代数组存放一组产品。集合除了可以提供一个更为便捷的模型分组数据结构,还提示一些可用于操作实体集合的一些特定方法,下面我就介绍一下他们:

1、addFieldToFilter():

用于为集合添加一个属性滤镜,该函数用于普通的非EAV模型,如下:

$product_review = Mage::getModel('review/review_summary')->getCollection()
    ->addFieldToFilter('entity_pk_value', array('eq' => $product_id))
    ->getData();

2、addAttributeFilter()

使用addAttributeFilter()作为过滤器是直接对属性进行过滤筛选,如下:

$review_collection = Mage::getModel('review/review')->getCollection()               ->addStoreFilter(Mage::app()->getStore()->getId())
    ->addStatusFilter(Mage_Review_Model_Review::STATUS_APPROVED)
    ->addFieldToFilter('entity_pk_value', array('in' => $childProductIds))
    ->setDateOrder()
    ->setPageSize(self::REVIEW_COUNT)
    ->addRateVotes();

3、addAttributeToFilter()

方法用于过滤EAV实体中的集合,如下:

$products = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('entity_id', array('in' => $ids));

4、addAttributeToSelect()

用于为集合中实体添加属性,可使用星号“ * ”来作为通配符来添加所有属性,但是这里要说明一下这个“ * ”不要轻易使用,它很消耗性能的,最好是添加指定的属性,如下:

$collection = Mage::getModel('catalog/product')->getCollection()
    ->setStore($this->_getStore())
    ->addAttributeToSelect('name')
    ->addAttributeToSelect('sku')
    ->addAttributeToSelect('price')
    ->addAttributeToSelect('attribute_set_id');

5、addAttributeToSort()

该方法用于添加属性来进行排序,如下:

$collection = $order->getCollection()
    ->addAttributeToFilter('created_at', array('date'=>true, 'from'=> $passDate))
    ->addAttributeToSort('created_at','desc');

Magento的addFieldToFilter方法支持如下条件表达式:

Attribute code SQL condition

condition symbol
eq =
neq !=
like LIKE
nlike NOT LIKE
in IN ()
nin NOT IN ()
is IS
notnull NOT NULL
null NULL
moreq >=
gt >
lt <
gteq >=
lteq <=
finset FIND_IN_SET()
from >=
to <=

你可能感兴趣的:(Magento杂谈)