Jaka jest różnica funkcji addAttributeToFilter () w porównaniu z addFieldToFilter ()?

21

Jestem trochę zdezorientowany, jaka jest różnica między funkcjami addAttributeToFilter () i addFieldToFilter (). Sprawdziłem podstawowe pliki w Magento. Ale nie mogłem znaleźć jasnego pomysłu. Ponieważ w przypadku niektórych kolekcji w magento zastosowano metodę addAttributeToFilter (), a w niektórych zastosowano metodę addFieldToFilter (). Wszelkie wyjaśnienia na ten temat byłyby bardzo pomocne. Z góry dziękuję.

Sukeshini
źródło

Odpowiedzi:

45

addAttributeToFilter() służy do filtrowania kolekcji EAV.

addFieldToFilter() służy do filtrowania kolekcji spoza EAV.

Modele EAV to na przykład produkt, klient, sprzedaż itp., Dzięki czemu można używać addAttributeToFilter()tych jednostek.

addFieldToFilter()jest odwzorowany addAttributeToFilter()na podmioty EAV. Więc możesz po prostu użyć addFieldToFiler().

Edytować:

Możesz sprawdzić, app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpgdzie odbywa się mapowanie:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}
Anna Völkl
źródło
doskonała odpowiedź. Brawo. pozwala mi dowiedzieć się, gdzie są rzeczy. informuje mnie, że można go używać z EAV, nawet jeśli może on obsługiwać również inne niż EAV. jest wykonalny i daje czytelnikom narzędzia, aby dowiedzieć się więcej, a nie tylko odpowiedź na to pytanie. Czy mógłbyś odpowiedzieć na pytanie dotyczące różnicy między addAttributeToSelect()vs addAttributeToFilter()?
ahnbizcad
1
Różnica polega na tym, że dotyczy części SQL: addAttributeToSelect()odniesienia do SELECTczęści zapytania i zaznaczenia tylko określonych kolumn. addFAttributeToFilter()służy do filtrowania kolekcji i dlatego jest dodawany do WHEREczęści.
Anna Völkl,
3

W odniesieniu do EAV nie ma różnicy.

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

Moje założenie, choć może się mylić, jest takie, że dla EAV używają nazw atrybutów, ponieważ każdy atrybut do filtrowania jest sam w sobie samodzielnym elementem, który ma swoje własne ustawienia itp. Gdzie, gdy nie używa EAV, jest to tylko kolejna kolumna na tabelę bazy danych, więc nazwa Field działa dobrze.

David Manners
źródło