Quelle est la différence entre addAttributeToFilter () et addFieldToFilter ()?

21

Je suis un peu confus quelle est la différence entre les fonctions addAttributeToFilter () et addFieldToFilter (). J'ai vérifié les fichiers principaux dans magento. Mais je ne pouvais pas trouver une idée claire. Parce que pour certaines des collections de magento a utilisé addAttributeToFilter () et certains ont utilisé addFieldToFilter (). Veuillez toute clarification à ce sujet serait d'une grande aide. Merci d'avance.

Sukeshini
la source

Réponses:

45

addAttributeToFilter() est utilisé pour filtrer les collections EAV.

addFieldToFilter() est utilisé pour filtrer les collections non EAV.

Les modèles EAV sont par exemple des produits, des clients, des ventes, etc., vous pouvez donc les utiliser addAttributeToFilter()pour ces entités.

addFieldToFilter()est mappé addAttributeToFilter()pour les entités EAV. Vous pouvez donc simplement utiliser addFieldToFiler().

Éditer:

Vous pouvez voir app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpoù le mappage est effectué:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}
Anna Völkl
la source
excellente réponse. Bravo. cela me permet de comprendre où sont les choses. il m'informe que l'on est utilisable avec EAV même s'il peut aussi gérer des non EAV. c'est actionnable, et cela donne aux lecteurs des outils pour comprendre plus, pas seulement la réponse à cette question particulière. Pourriez-vous répondre à une question sur la différence entre addAttributeToSelect()vs addAttributeToFilter()?
ahnbizcad
1
La différence est la partie du SQL qui est affectée: fait addAttributeToSelect()référence à la SELECTpartie d'une requête et ne sélectionne que des colonnes spécifiques. addFAttributeToFilter()est utilisé pour filtrer une collection et est donc ajouté à la WHEREpièce.
Anna Völkl
3

En ce qui concerne l'EAV, il n'y a pas de différence.

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

Mon hypothèse, bien que je puisse me tromper, est que pour EAV, ils utilisent le nom d'attribut car chaque attribut à filtrer est en soi un élément autonome qui a ses propres paramètres, etc. Où, lorsque vous n'utilisez pas EAV, c'est juste une autre colonne une table de base de données et donc le nom Field fonctionne bien.

David Manners
la source