Was ist der Unterschied zwischen addAttributeToFilter () und addFieldToFilter ()?

21

Ich bin ein bisschen verwirrt, was der Unterschied zwischen den Funktionen addAttributeToFilter () und addFieldToFilter () ist. Ich habe die Kerndateien in Magento überprüft. Aber ich konnte keine klare Idee finden. Weil einige der Sammlungen in Magento addAttributeToFilter () und einige addFieldToFilter () verwendet haben. Bitte jede Klarstellung dazu wäre eine große Hilfe. Danke im Voraus.

Sukeshini
quelle

Antworten:

45

addAttributeToFilter() wird zum Filtern von EAV-Sammlungen verwendet.

addFieldToFilter() wird zum Filtern von Nicht-EAV-Sammlungen verwendet.

EAV-Modelle sind beispielsweise Produkte, Kunden, Verkäufe usw., sodass Sie sie addAttributeToFilter()für diese Entitäten verwenden können.

addFieldToFilter()wird addAttributeToFilter()für EAV-Entitäten zugeordnet. Sie können also einfach verwenden addFieldToFiler().

Bearbeiten:

Sie können sich ansehen, app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpwo das Mapping durchgeführt wird:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}
Anna Völkl
quelle
ausgezeichnete Antwort. Bravo. es erlaubt mir herauszufinden, wo die Dinge sind. es teilt mir mit, dass man mit EAV arbeiten kann, auch wenn es auch mit Nicht-EAV umgehen kann. Es ist umsetzbar und bietet den Lesern die Möglichkeit, mehr herauszufinden, nicht nur die Antwort auf diese spezielle Frage. Würde es Ihnen etwas ausmachen, eine Frage zum Unterschied zwischen addAttributeToSelect()vs zu beantworten addAttributeToFilter()?
Ahnbizcad
1
Der Unterschied ist der betroffene Teil der SQL: addAttributeToSelect()Verweist auf den SELECTTeil einer Abfrage und wählt nur bestimmte Spalten aus. addFAttributeToFilter()wird zum Filtern einer Sammlung verwendet und daher dem WHERETeil hinzugefügt .
Anna Völkl
3

In Bezug auf EAV gibt es keinen Unterschied.

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

Obwohl ich mich irren könnte, gehe ich davon aus, dass für EAV die Attributbezeichnung verwendet wird, da jedes zu filternde Attribut für sich genommen ein eigenständiges Element mit eigenen Einstellungen ist eine Datenbanktabelle und so funktioniert der Name Field gut.

David Manners
quelle