下载: 深入理解Magento.pdf

记录一下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.pdf

原文/转自:Magento模型集合addFieldToFilter常用过滤条件

Magento模型集合addFieldToFilter常用过滤条件相关推荐

  1. mac系统使用wireshark抓取无线网卡数据包以及常用过滤条件

    调试无线功能,比如无线网卡无法连接这类问题,抓取无线报文显得十分重要,通过分析无线报文交互过程,可以快速定位问题. windows下常使用omnipeek进行抓包,这个时候需要一张无线网卡和相应的抓包 ...

  2. wireshark常用过滤条件

    1. 过滤IP,如来源IP或者目标IP等于某个IP 例子: ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107 或者 ip.addr eq 192.1 ...

  3. 数据列过滤条件常用处理

    目录: 1. 概述 2. 过滤条件中使用nofilter 3. 对某一列进行处理后再过滤 4. 过滤条件的和与或 1. 概述编辑 数据列过滤条件的设置也是很灵活的,除了常规简单设置外,还有几种常用处理 ...

  4. Linux 使用grep过滤多个条件及grep常用过滤命令

    这篇文章主要介绍了Linux 使用grep筛选多个条件及grep常用过滤命令,需要的朋友可以参考下 cat log.txt | grep 条件: cat log.txt | grep 条件一 | gr ...

  5. wex5 实战 常用代码模型集合

    学习和使用wex5有一段时间了,发现有些代码,虽然没有自动提功能,但是几乎每个页面或功能都要用到,索性做成了代码模板,当需要的时候直接拷过来用,简化过程,减少开发时间,改改就行. 一 事件监听模型 / ...

  6. java stream 8 常用的操作集合 求和 排序 过滤 拿出对象元素组成集合

    举个例子拿一个教师给学生开家长会Java实体 解释 stream 流操作集合建立在内存之上非常的快 以下列举 常用的操作方法 @Data public class OpenClass {private ...

  7. 利用GRB颜色模型过滤条件进行火灾检测

    火灾检测的相关介绍参考我另一篇博客:火灾检测方法总结       本文RGB过滤条件参考论文:Fire detection using statistical color model in video ...

  8. full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序

    这是在实现多表关联时想到的. 我们现在这套体系,实现多表关联比较复杂.如果Superset能官方支持多表关联,不知道会是什么样的方案,复杂度如何. 在公式这个层面,没有关联条件,只有两个列.或者多个列 ...

  9. 使用fiddler的过滤条件

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

最新文章

  1. Python网络爬虫 - 一个简单的爬虫例子
  2. echo打印彩色的用法
  3. vscode和anaconda结合的环境配置
  4. 计算机组成原lta,计算机组成原理实验三运算器
  5. SAP Spartacus core fromOccBaseSites逻辑
  6. sessionStorage 、localStorage 和 cookie 之间的区别(转)
  7. linux gui编程语言,使用 Red 语言编写 GUI 应用程序
  8. PyCharm 在Windows的有用快捷键
  9. 通过AOP引入Log4j
  10. html给看板娘添加语音,用html代码给网页加个live2d看板娘吧
  11. 同事去了友司,没什么可怕的
  12. android 打开pdf文件
  13. 心动的本质是什么_风动,幡动,仁者心动,到底是什么在动
  14. 【华为OD机试 2023最新 】 网上商城优惠活动(C++)
  15. 厉害!6 岁学编程,19 岁收月薪 2 万 的 Offer | 程序人生 2020
  16. 尚硅谷谷粒商城第十二天 商品详情页及异步编排
  17. MySQL:Impossible WHERE noticed after reading const tables
  18. 计算机锁屏之后QQ音乐停止播放了,win10在锁屏后怎样设置才能继续播放音乐
  19. JAVA实现 PDF转换 常用工具类(html转PDF、PDF添加页码、PDF文件下载、PDF添加印章或者水印)
  20. Maven使用(一)

热门文章

  1. 小A点菜(洛谷-P1164)
  2. 逆序对(洛谷-P1908)
  3. 城市路(信息学奥赛一本通-T1381)
  4. 拦截导弹问题(信息学奥赛一本通-T1322)
  5. 括弧匹配检验(信息学奥赛一本通-T1354)
  6. 骑车与走路(信息学奥赛一本通-T1050)
  7. 信息学奥赛C++语言: 将字符串中的小写字母转换成大写字母
  8. charles浏览器抓包https_charles https抓包
  9. 视图与表之间的异同点_视图和表的区别和联系
  10. c不是面向对象编程语言 所以不具有面对,go 学习笔记之go是不是面向对象语言是否支持面对对象编程?...