В чем разница между addAttributeToFilter() И addFieldToFilter()?
Я немного запутался, в чем разница функций addAttributeToFilter() и addFieldToFilter(). Я проверил основные файлы в magento. Но я не мог придумать четкой идеи. Потому что для некоторых коллекций в magento использовался addAttributeToFilter(), а некоторые использовали addFieldToFilter(). Пожалуйста, любые разъяснения по этому поводу были бы большим подспорьем. Заранее спасибо.
2 answers
addAttributeToFilter()
используется для фильтрации коллекций подслушивающих устройств.
addFieldToFilter()
используется для фильтрации коллекций, не связанных с прослушиванием.
Модели 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);
}
Что касается подслушивания, то здесь нет никакой разницы.
/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php
public function addFieldToFilter($attribute, $condition = null)
{
return $this->addAttributeToFilter($attribute, $condition);
}
Мое предположение, хотя я могу ошибаться, состоит в том, что для EAV они используют именование атрибутов, поскольку каждый атрибут для фильтрации сам по себе является отдельным элементом, который имеет свои собственные настройки и т. Д. Где, как и при отсутствии использования EAV, это просто еще один столбец в таблице базы данных, поэтому поле имени работает хорошо.