Qual è la differenza di addAttributeToFilter () Vs addFieldToFilter ()?


21

Sono un po 'confuso qual è la differenza tra le funzioni addAttributeToFilter () e addFieldToFilter (). Ho controllato i file core in magento. Ma non sono riuscito a capire un'idea chiara. Perché per alcune delle raccolte in magento è stato utilizzato addAttributeToFilter () e alcuni hanno utilizzato addFieldToFilter (). Per favore qualsiasi chiarimento su questo sarebbe di grande aiuto. Grazie in anticipo.

Risposte:


45

addAttributeToFilter() viene utilizzato per filtrare le raccolte EAV.

addFieldToFilter() viene utilizzato per filtrare raccolte non EAV.

I modelli EAV sono ad esempio prodotti, clienti, vendite, ecc., Quindi è possibile utilizzarli addAttributeToFilter()per tali entità.

addFieldToFilter()è mappato addAttributeToFilter()per le entità EAV. Quindi puoi semplicemente usare addFieldToFiler().

Modificare:

Puoi dare un'occhiata a app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpdove viene eseguita la mappatura:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}

risposta eccellente. Bravo. mi permette di capire dove sono le cose. mi informa che uno è utilizzabile con EAV anche se può anche gestire non EAV. è utilizzabile e offre agli strumenti gli strumenti per capire di più, non solo la risposta a questa particolare domanda. Ti dispiacerebbe rispondere a una domanda sulla differenza tra addAttributeToSelect()vs addAttributeToFilter()?
ahnbizcad,

1
La differenza è la parte dell'SQL che è interessata: fa addAttributeToSelect()riferimento alla SELECTparte di una query e seleziona solo colonne specifiche. addFAttributeToFilter()viene utilizzato per filtrare una raccolta e viene quindi aggiunto alla WHEREparte.
Anna Völkl

3

Per quanto riguarda l'EAV non c'è differenza.

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

La mia ipotesi, sebbene potrei sbagliarmi, è che per EAV usano il nome dell'attributo poiché ogni attributo su cui filtrare è di per sé un elemento autonomo che ha le sue impostazioni ecc. Dove come quando non si utilizza EAV è solo un'altra colonna su una tabella di database e quindi il nome Field funziona bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.