Чим відрізняється addAttributeToFilter () Vs addFieldToFilter ()?


21

Я трохи розгублений, в чому різниця функцій addAttributeToFilter () та addFieldToFilter (). Я перевірив основні файли в magento. Але я не міг зрозуміти чіткої ідеї. Тому що для деяких колекцій у magento використовували addAttributeToFilter (), а деякі використовували addFieldToFilter (). Будь-яке роз'яснення з цього питання допоможе вам. Заздалегідь спасибі.

Відповіді:


45

addAttributeToFilter() використовується для фільтрації колекцій EAV.

addFieldToFilter() використовується для фільтрації колекцій Non-EAV.

Моделі EAV - це, наприклад, товар, клієнт, продаж тощо, тому ви можете використовувати їх 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частини.
Anna Völkl

3

Що стосується EAV, то різниці немає.

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

Моє припущення, хоча я можу помилятися, полягає в тому, що для EAV вони використовують найменування атрибутів, оскільки кожен атрибут для фільтрування сам по собі є окремим елементом, який має свої власні налаштування тощо. таблиця бази даних, тому ім'я Поле працює добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.