В чем разница между addAttributeToFilter() И addFieldToFilter()?


Я немного запутался, в чем разница функций addAttributeToFilter() и addFieldToFilter(). Я проверил основные файлы в magento. Но я не мог придумать четкой идеи. Потому что для некоторых коллекций в magento использовался addAttributeToFilter(), а некоторые использовали addFieldToFilter(). Пожалуйста, любые разъяснения по этому поводу были бы большим подспорьем. Заранее спасибо.

Author: Adarsh Khatri, 2013-09-26

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);
}
 46
Author: Anna Völkl, 2013-09-26 16:47:00

Что касается подслушивания, то здесь нет никакой разницы.

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

Мое предположение, хотя я могу ошибаться, состоит в том, что для EAV они используют именование атрибутов, поскольку каждый атрибут для фильтрации сам по себе является отдельным элементом, который имеет свои собственные настройки и т. Д. Где, как и при отсутствии использования EAV, это просто еще один столбец в таблице базы данных, поэтому поле имени работает хорошо.

 3
Author: David Manners, 2013-09-26 16:29:02