记录一下Magento模型集合Model Collection中addFieldToFilter()方法常用的过滤条件。以下参数也同样适用于产品实体的addAttributeToFilter()方法。

//等于 Equals: eq
$_products->addAttributeToFilter('status', array('eq' => 1)); //不等于 Not Equals - neq
$_products->addAttributeToFilter('sku', array('neq' => 'test-product')); //Like - like
$_products->addAttributeToFilter('sku', array('like' => 'UX%')); //Not Like - nlike
$_products->addAttributeToFilter('sku', array('nlike' => 'err-prod%')); //In - in
$_products->addAttributeToFilter('id', array('in' => array(1,4,98))); //Not In - nin
$_products->addAttributeToFilter('id', array('nin' => array(1,4,98))); //NULL - null
$_products->addAttributeToFilter('description', 'null'); //Not NULL - notnull
$_products->addAttributeToFilter('description', 'notnull'); //大于 Greater Than - gt
$_products->addAttributeToFilter('id', array('gt' => 5)); //小于 Less Than - lt
$_products->addAttributeToFilter('id', array('lt' => 5)); //大于等于 Greater Than or Equals To- gteq
$_products->addAttributeToFilter('id', array('gteq' => 5)); //小于等于 Less Than or Equals To - lteq
$_products->addAttributeToFilter('id', array('lteq' => 5));
 

也可以有:
$collection->addAttributeToFilter(

    array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
 

实例:

$collection->addFieldToFilter('max_item_count',
array(
array('gteq' => 10),
array('null' => true),
)
)
->addFieldToFilter('max_item_price',
array(
array('gteq' => 9.99),
array('null' => true),
)
)
->addFieldToFilter('max_item_weight',
array(
array('gteq' => 1.5),
array('null' => true),
)
);

Which results in this SQL:

SELECT `main_table`.*
FROM `shipping_method_entity` AS `main_table`
WHERE (((max_item_count >= 10) OR (max_item_count IS NULL)))
AND (((max_item_price >= 9.99) OR (max_item_price IS NULL)))
AND (((max_item_weight >= 1.5) OR (max_item_weight IS NULL)))
 

addFieldToFilter()
据我所知,addAttributeToFilter只适用于在Magento产品。当我第一次发现了这个事实,我不仅感到震惊,我很担心!我想,没有

它,我将有我所有的SQL查询定制工艺。找Magento的核心代码后,我发现addFieldToFilter()。这个功能,在相同的方式工作,并采
用相同的参数研究,但它适用于所有集合,不只是产品!

关于addFieldToFilter()的一些用法请看:http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/using_collections_in_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语句)。第二种方法是肯定更好,更快,因为它会被执行,但我有参考他们都在这里。

在一个侧面说明,我将很快被写上getSelect()函数的文章,因为它开辟了一个门在Magento集合,让他们(和你)真正的力量!

Magento的集合实际上就是一个包含其它模型的模型,所以我们可以用Product集合来取代数组存放一组产品。集合除了可以提供一个更为便捷的模型分组数据结构,还提示一些可用于操作实体集合的一些特定方法,其中较为有用的方法有:

  • addAttributeToSelect:用于为集合中实体添加属性,可使用星号*来作为通配符来添加所有属性
  • addFieldToFilter:用于为集合添加一个属性滤镜,该函数用于普通的非EAV模型
  • addAttributeToFilter:方法用于过滤EAV实体中的集合
  • addAttributeToSort:该方法用于添加属性来进行排序
  • addStoreFilter:该方法用于存储可用性滤镜,包含可用产品
  • addWebsiteFilter:该方法为集合添加一个站点滤镜
  • addCategoryFilter:该方法用于为产品集合指定分类滤镜
  • addUrlRewrite:该方法用于向产品添加URL重写数据
  • setOrder:该方法用于设定集合的排序

这里仅列出了一部分集合方法,每个集合依据相应的实体类型采用不同的方法。例如,customer集合 Mage_Customer_Model_Resource_Customer_Collection对应一个特定方法groupByEmail(),从 名称就可以看出它是一个对内部实体email的分组。
参照前面的例子,我们还是会使用产品模型,就当前而言产品集合:

Magento模型集合addFieldToFilter常用过滤条件

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

Attribute code SQL condition
eq =
neq !=
like LIKE
nlike NOT LIKE
in IN ()
nin NOT IN ()
is IS
notnull NOT NULL
null NULL
moreq >=
gt >
lt <
gteq >=
lteq <=

我们还可以使用其它类型的过滤,比如在上面的日期过滤代码后添加如下代码来获取可见产品:

$productCollection->addAttributeToFilter('visibility', 4);

这个可见性属性是由产品用来控制产品在何处显示的特殊属性,它可以有如下值:

  • 单独不可见:值为1
  • 目录中可见:值为2
  • 搜索中可见:值为3
  • 目录和搜索中可见:值为4

magento addFieldToFilter()方法常用的过滤条件的更多相关文章

  1. 三十三:数据库之SQLAlchemy.filter常用的过滤条件

    准备数据 等于 不等于 like(区分大小写,模糊查询).ilike(不区分大小写) in not in(~,取反) 字段为空 不为空 and or

  2. 自定义 Azure Table storage 查询过滤条件

    本文是在Azure Table storage 基本用法一文的基础上,介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table storage ...

  3. Informatica 常用组件Filter之二 过滤条件

    过滤条件可以使用转换语言输入.过滤条件是返回 TRUE 或 FALSE 的表达式.例如,如果您要过滤出员工薪水低于 $30,000 的行,可输入以下条件: SALARY > 30000 可以使用 ...

  4. 使用wireshark常用的过滤命令

    使用wireshark常用的过滤命令 方法/步骤 过滤源ip.目的ip.在wireshark的过滤规则框Filter中输入过滤条件.如查找目的地址为192.168.101.8的包,ip.dst==19 ...

  5. 在sphinx中应用复杂过滤条件

    一.问题的引入   在sphinx应用中,需要对数据进行复杂的条件过滤,刷选出我们需要的数据.这个过程,等同于mysql查询中的where条件.   但sphinx本身的filter并不能支持复杂的逻 ...

  6. odoo开发笔记 -- many2one搜索更多增加默认过滤条件

    没加过滤条件的时候,效果如下,点击下拉框,搜索更多出现所有模型下的模板: 改进方法(增加默认过滤条件,显示指定模型下的内容): class IrCloudReport(models.Model): _ ...

  7. 使用fiddler的过滤条件

    使用fiddler抓包的时候经常一下子显示很多的记录,看的眼花缭乱,需要这时候需要使用过滤条件来帮助你,一般常用的有三种过滤条件: 1.域名过滤,只显示特定域名的记录: *.baidu.com表示所有 ...

  8. elasticsearch dump加过滤条件(--searchBody)出错的解决 Unexpected token ' in JSON at position 0

    环境:本文测试在es2.4,win10下进行 es dump导数据可以加过滤条件,只导满足条件的数据.方法是用—searchBody参数,值是查询时的查询条件的json格式,例如 然而按官网和网上的格 ...

  9. k3 cloud中提示总账期末结账提示过滤条件太长,请修改此过滤条件

    k3 cloud中提示总账期末结账提示过滤条件太长,请修改此过滤条件,如下图所示: 处理方法: 请尝试系统配置文件common.config中将如附件所示的参数值改大,建议值为2000,并在系统清理缓 ...

随机推荐

  1. Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-067 发布时间: 2013-11-07 ...

  2. UpdatePanel无法直接弹出窗口的解决

    UpdatePanel无法直接弹出窗口的解决 2010-06-20  来自:博客园  字体大小:[大 中 小] 摘要:本文介绍一些UpdatePanel无法直接弹出窗口的解决方法 ///<sum ...

  3. 【转】Mac QQ截图保存在哪里?

    原文网址:http://www.pc6.com/edu/67677.html QQ Mac版的截屏图片保存在哪儿呢?可不可以像Windows版本一样设定保存路径呢?当然是可定的.Mac QQ截图保存你 ...

  4. 【转】CString类型互转 int

    CString类型互转 int 原文网址:http://www.cnitblog.com/Hali/archive/2009/06/25/59632.html CString类型的转换成int  将字 ...

  5. 对象、对象数组、JSON、JSON数组的相关操作

    本文主要是对JS操作JSON的要领做下总结在JSON中,有两种结构:对象和数组 1. 一个对象以“{”(左括号)开始,“}”(右括号)结束.每个“名称”后跟一个“:”(冒号):“"名称/值& ...

  6. HDU 1518

    思路:从第一个数开始搜索,将其和与边长比对,相等则计数+1,计数达到3的时候说明可以组成,因为剩下那条必与边长相等,搜索过程注意剪枝,若某个数已被加入边长则不能重复计算,应将其标记,另外应在每一层递归 ...

  7. opencv源代码

    源代码都在modules文件夹下.搜索一个函数比如dft,在win7下 找到了

  8. Weka-学习

    1.在java中使用Weka的eclipse配置方法 http://ianma.wordpress.com/2010/01/16/weka-with-java-eclipse-getting-star ...

  9. hadoop-2.6.0.tar.gz + spark-1.5.2-bin-hadoop2.6.tgz的集群搭建(单节点)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接.http://www.cnblogs.com/zlslch/p/ ...

  10. PC-老鸟装机

    老鸟装机 一.硬件安装莫疏忽   1>安装硬盘有讲究     1.单硬盘+单光驱       IDE1----硬盘(Mastet接口)       IDE2----光驱(Mastet接口)    ...