Qual é a diferença de addAttributeToFilter () vs. addFieldToFilter ()?

21

Estou um pouco confuso qual é a diferença entre as funções addAttributeToFilter () e addFieldToFilter (). Eu verifiquei os arquivos principais no magento. Mas não consegui descobrir uma ideia clara. Porque, para algumas das coleções no magento, use addAttributeToFilter () e algumas usaram addFieldToFilter (). Por favor, qualquer esclarecimento sobre isso seria uma grande ajuda. Desde já, obrigado.

Sukeshini
fonte

Respostas:

45

addAttributeToFilter() é usado para filtrar coleções de EAV.

addFieldToFilter() é usado para filtrar coleções não-EAV.

Os modelos de EAV são, por exemplo, produto, cliente, vendas, etc., para que você possa usar o uso addAttributeToFilter()para essas entidades.

addFieldToFilter()é mapeado addAttributeToFilter()para entidades EAV. Então você pode apenas usar addFieldToFiler().

Editar:

Você pode ver app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phponde o mapeamento é feito:

public function addFieldToFilter($attribute, $condition = null) {
    return $this->addAttributeToFilter($attribute, $condition);
}
Anna Völkl
fonte
excelente resposta. bravo. isso me permite descobrir onde estão as coisas. ele me informa que é possível utilizá-lo com o EAV, mesmo que ele também possa lidar com não-EAV. é acionável e fornece as ferramentas para que os leitores descubram mais, não apenas a resposta para essa pergunta em particular. Importa-se de responder a uma pergunta sobre a diferença entre addAttributeToSelect()vs addAttributeToFilter()?
ahnbizcad
1
A diferença é a parte do SQL afetada: faz addAttributeToSelect()referência à SELECTparte de uma consulta e seleciona apenas colunas específicas. addFAttributeToFilter()é usado para filtrar uma coleção e, portanto, adicionado à WHEREpeça.
Anna Völkl
3

Com relação ao EAV, não há diferença.

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

Minha suposição, embora eu possa estar errado, é que, para o EAV, eles usam o nome de atributo, já que cada atributo para filtrar é em si um item autônomo que tem suas próprias configurações etc. uma tabela de banco de dados e, portanto, o nome Field funciona bem.

David Manners
fonte