Já ouvi muitas vezes que ambos são iguais. Mas estou enfrentando um problema estranho: na coleção de produtos do módulo CatalogSearch, count () está retornando a contagem correta de produtos, enquanto getSize () está retornando zero.
Então, basicamente é isso que estou recebendo:
$collection->count(); //correct count
$collection->getSize(); //0
Mas quero que o getSize () tenha a contagem correta, pois decide se exibirá paginação e produtos na página de pesquisa ou não. Estou usando as condições Inner Join, Left Join e Where apenas na coleção para ser mais específico.
Alguma idéia de por que estou recebendo esse problema estranho?
obrigado
ATUALIZAR:
Minha pergunta anterior, Como clonar a coleção no Magento? Eu queria realizar duas operações diferentes em uma coleção. A primeira coleção mostra getSize () correto, mas, se o getSize () for zero, removi a cláusula WHERE e forneci a nova condição WHERE. Depois disso, estou obtendo o SQL bruto correto, o que eu esperava, e executá-lo no MySQL também fornece um conjunto correto de registros, mas apenas getSize () na coleção está dando zero contagens.
Então, basicamente, talvez eu precise recarregar a coleção, pois getSize () está levando a contagem antiga. Faz sentido?
fonte
getSize()
? Obrigado!CatalogSearch
módulo, não há nada que substituagetSize()
ougetSelectCountSql()
. Ele deve funcionar por padrão, a menos que você tenha adicionado algum código personalizado. Você pode postar a maneira como cria a coleção?_totalRecords
. Você pode tentar clonar a coleção antes de chamargetSize()
a coleção original. Talvez isso funcione.$sql = $collection->getSelectCountSql(); return $collection->getConnection()->fetchOne($sql);
Seja cuidadoso. Isso está correto, mas os métodos são substituídos
Varien_Data_Collection_Db
conforme descrito por MariusBasta dar uma olhada
Portanto, nesse nível baixo, deve ser o mesmo. Ambos os métodos carregam a coleção e contam os itens.
ATUALIZAR
Oh, eu vejo um problema: getSize () armazena em cache os _totalRecords, isso significa que não é recalculado. Verifique onde
_totalRecords
está definido?fonte
getSize()
?getSize()
não carrega a coleção para registros provenientes da base de dados. A menos que você substitua o método e diga para carregar a coleção.echo count($collection->load()->getItems());
dá contagem correta, mas novamente eu querogetSize()
trabalhar.Esta resposta aparece no google para "magento getSize errado" e pesquisas semelhantes, então eu gostaria de adicionar um cenário possível que possa ser útil para alguém
Quando você tem uma instrução de grupo em sua consulta e faz uma
O Mysql retornará uma contagem para EACH dos grupos, então Varien_Data_Collection_Db :: getSize () retornará a resposta errada, isso ocorre porque esta função busca a primeira linha:
Quando preenche
Ele seleciona a primeira linha e, portanto, retorna o total do primeiro grupo como o tamanho total.
Acabei criando esse código para contar, com base nos valores exclusivos dos atributos na minha consulta.
fonte
Caso você acabe aqui, existe outra solução simples para tentar:
e selecione todos eles (mesmo que estejam indicando "Verde, não é necessário reindexar" e forçá-los a reindexar.
Isso resolveu meu
getSize()
problema vazio , que, por sua vez, permitiu que as solicitações de banco de dados Especial e Novo encontrassem os produtos, cumprissem as condições "se" e renderizassem corretamente.fonte
Quando
count($collection)
era diferente do que$collection->getSize()
eu tinha parareindex
os produtos, então tudo funcionou bem.fonte
Há uma diferença principal Para getSize (), a coleção de produtos não é carregada. Para count (), ele carregará toda a coleção de produtos. Portanto, para grandes catálogos, não é aconselhável usar a função de contagem em nenhuma coleção.
fonte