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

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

原文地址:https://www.cnblogs.com/focai/p/11725006.html

时间: 2024-08-30 03:57:40

Magento模型集合addFieldToFilter常用过滤条件的相关文章

sqlalchemy filter 方法常用过滤条件

一.filter 过滤条件: 过滤是数据提取的一个很重要的功能,这些过滤条件是通过filter来实现 二.示例:    原文地址:https://www.cnblogs.com/yingxiongguixing/p/12042732.html

小猿圈:Linux使用grep筛选多个条件及grep常用过滤命令

本篇文章小猿圈linux老师给大家分享一下Linux使用grep筛选多个条件及grep常用过滤命令,对Linux开发技术感兴趣的小伙伴就一起来看一下吧. cat log.txt | grep 条件; cat log.txt | grep 条件一 | grep 条件二; cat log.txt | grep 条件一 | grep 条件二 | grep 条件三; grep 条件一 log.txt | grep 条件二 | grep 条件三; 不说废话,例如需要排除abc.txt中的mmm nnn g

小猿圈之Linux使用grep筛选多个条件及grep常用过滤命令

linux最常用的就是命令,了解linux的朋友都知道:今天小猿圈linux老师说一下grep命令的使用,希望大家看后能掌握grep命令,接下来看一下grep命令的使用方法. cat log.txt | grep 条件; cat log.txt | grep 条件一 | grep 条件二; cat log.txt | grep 条件一 | grep 条件二 | grep 条件三; grep 条件一 log.txt | grep 条件二 | grep 条件三; 不说废话,例如需要排除abc.txt

Informatica 常用组件Filter之 过滤条件

过滤条件可以使用转换语言输入.过滤条件是返回 TRUE 或 FALSE 的表达式.例如,如果您要过滤出员工薪水低于 $30,000 的行,可输入以下条件: SALARY > 30000 可以使用 AND 和 OR 逻辑运算符来指定多个条件组合.如果要过滤掉薪水低于 $30,000 和多于 $100,000 的员工,您可输入以下条件: SALARY > 30000 AND SALARY < 100000 无需指定 TRUE 或 FALSE 作为表达式中的值.TRUE 和 FALSE 为您设

.NET深入实战系列--EF到底怎么写过滤条件

本文唯一访问地址:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: /// <summary> /// 只是简单举例,只用了两个过滤条件 /// </summary> IEnumerable<UserInfo> Search(string username = "", string usertype = "&

.NET深入实战系列--EF到底怎么写过滤条件(转)

原文来自:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: /// <summary> /// 只是简单举例,只用了两个过滤条件 /// </summary> IEnumerable<UserInfo> Search(string username = "", string usertype = ""

深入理解Magento - 第六章 - 高级Magento模型

我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resrouce_Abstract”,但是简单模型是直接继承“Mage_Core_Model_Mysql4_Abstract”,而E

使用fiddler的过滤条件

使用fiddler抓包的时候经常一下子显示很多的记录,看的眼花缭乱,需要这时候需要使用过滤条件来帮助你,一般常用的有三种过滤条件: 1.域名过滤,只显示特定域名的记录: 过滤的条件,如果前面有二级域名可以用*号代替,只过滤一级域名,设置好了后一定要点击Actions生效: 2.类型过滤,一般对各种图片.CSS.JS这类的静态素材也不需要看的情况下,直接全部过滤掉 需要过滤多少自己直接加入就好了 3.根据返回状态码,比如只想显示200的状态,其他的不显示

深入理解Magento – 第六章 – 高级Magento模型(转)

深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第六章 – 高级Magento模型 我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resro