¿Cuál es la diferencia de addAttributeToFilter () Vs addFieldToFilter ()?

21

Estoy un poco confundido sobre cuál es la diferencia de las funciones addAttributeToFilter () y addFieldToFilter (). Revisé los archivos principales en magento. Pero no pude encontrar una idea clara. Porque para algunas de las colecciones en magento ha usado addAttributeToFilter () y algunas han usado addFieldToFilter (). Por favor, cualquier aclaración sobre esto sería de gran ayuda. Gracias por adelantado.

Sukeshini
fuente

Respuestas:

45

addAttributeToFilter() se usa para filtrar colecciones EAV.

addFieldToFilter() se usa para filtrar colecciones no EAV.

Los modelos EAV son, por ejemplo, productos, clientes, ventas, etc., por lo que puede usarlos addAttributeToFilter()para esas entidades.

addFieldToFilter()se asigna a las addAttributeToFilter()entidades EAV. Entonces puedes usarlo addFieldToFiler().

Editar:

Puede ver app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpdónde se realiza el mapeo:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}
Anna Völkl
fuente
Excelente respuesta. Bravo. me permite averiguar dónde están las cosas. me informa que uno se puede usar con EAV incluso si también puede manejar no EAV. es accionable y brinda a los lectores las herramientas para descubrir más, no solo la respuesta a esta pregunta en particular. ¿Te importaría responder una pregunta sobre la diferencia entre addAttributeToSelect()vs addAttributeToFilter()?
ahnbizcad
1
La diferencia es la parte del SQL que se ve afectada: hace addAttributeToSelect()referencia a la SELECTparte de una consulta y selecciona solo columnas específicas. addFAttributeToFilter()se utiliza para filtrar una colección y, por lo tanto, se agrega a la WHEREpieza.
Anna Völkl
3

Con respecto a EAV no hay diferencia.

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

Mi suposición, aunque podría estar equivocado, es que para EAV usan el nombre de atributo ya que cada atributo para filtrar es en sí mismo un elemento independiente que tiene su propia configuración, etc. una tabla de base de datos y, por lo tanto, el nombre Field funciona bien.

David modales
fuente