`
钟增生
  • 浏览: 31133 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

addFieldToFilter 与 addAttributeToFilter使用总结

    博客分类:
  • PHP
阅读更多

转载自:http://blog.csdn.net/shangxiaoxue/article/details/7108106

 

magento初学者在开发过程中,对addFieldToFilter和addAttributeToFilter的使用会比较迷惑,例如你在一个自定义模块中,在引用自己的table时,假如使用了addAttributeToFilter这个function,可能就会报错。
简单分析下原因:
我们在自定义模块里的collection类,因为没有涉及到EAV模型,一般都是继承Mage_Core_Model_Mysql4_Collection_Abstract这个类,而在Mage_Core_Model_Mysql4_Collection_Abstract(继承自Varien_Data_Collection_Db包含很多常用function)和它的父类里,是没有addAttributeToFilter这个function的,如果一定要使用addAttributeToFilter可以在collection加上如下function(或者改变collection的继承关系):

  1. public function addAttributeToFilter($attribute$condition = null)  
  2. {  
  3.     $this->addFieldToFilter($this->_attributeToField($attribute), $condition);  
  4.     return $this;  
  5. }  
  6.   
  7. /** 
  8.  * Check if $attribute is Mage_Eav_Model_Entity_Attribute and convert to string field name 
  9.  * 
  10.  * @param string|Mage_Eav_Model_Entity_Attribute $attribute 
  11.  * @return string 
  12.  */  
  13. protected function _attributeToField($attribute)  
  14. {  
  15.     $field = false;  
  16.     if (is_string($attribute)) {  
  17.         $field = $attribute;  
  18.     } elseif ($attribute instanceof Mage_Eav_Model_Entity_Attribute) {  
  19.         $field = $attribute->getAttributeCode();  
  20.     }  
  21.     if (!$field) {  
  22.         Mage::throwException(Mage::helper('yourmode')->__('Cannot determine the field name.'));  
  23.     }  
  24.     return $field;  
  25. }  
magento自带的模块涉及到EAV模型的collection最终都是继承自Mage_Eav_Model_Entity_Collection_Abstract,如catalog,customer模块等,这个类定义了很多有用的function,包括addAttributeToFilter等,读者可自行去深入了解。
总结:addFieldToFilter基本上是addAttributeToFilter的别名,很多时候能通用;对用自定义的模块,一般使用addFieldToFilter就能满足需求。对于EAV模型,大多都是系统自带模块,addAttributeToFilter就显得很有用。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics