addAttributeToFilter()与addFieldToFilter()有什么区别?


21

我有点困惑addAttributeToFilter()和addFieldToFilter()函数的区别是什么。我检查了magento中的核心文件。但是我不知道有一个明确的想法。因为magento中的某些集合使用了addAttributeToFilter(),而有些集合使用了addFieldToFilter()。请对此进行任何澄清将是很大的帮助。提前致谢。

Answers:


45

addAttributeToFilter() 用于过滤EAV集合。

addFieldToFilter() 用于过滤非EAV集合。

EAV模型是例如产品,客户,销售等,因此您可以将use addAttributeToFilter()用于这些实体。

addFieldToFilter()映射到addAttributeToFilter()EAV实体。这样就可以使用了addFieldToFiler()

编辑:

您可以查看app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php映射的完成位置:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}

很好的答案。太棒了 它可以让我弄清楚事物在哪里。它告诉我,即使它也可以处理非EAV,也可以与EAV一起使用。它是可行的,并且为读者提供了更多的工具,以解决更多的问题,而不仅仅是这个特定问题的答案。您介意回答关于addAttributeToSelect()vs 之间的区别的问题addAttributeToFilter()吗?
ahnbizcad

1
区别在于SQL addAttributeToSelect()的相关SELECT部分:对查询部分的引用,仅选择特定的列。addFAttributeToFilter()用于过滤集合,因此添加到WHERE零件中。
AnnaVölkl'15

3

关于EAV,没有区别。

/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php
public function addFieldToFilter($attribute, $condition = null)
{
    return $this->addAttributeToFilter($attribute, $condition);
}

我的假设(尽管我可能是错的)是,对于EAV,它们使用属性命名,因为每个要过滤的属性本身就是一个独立的项目,具有自己的设置,等等。而当不使用EAV时,它只是另一列数据库表,因此名称Field效果很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.