He escuchado muchas veces que ambos son iguales. Pero me enfrento a un problema extraño, en la colección de productos del módulo CatalogSearch, count () devuelve el recuento de producto correcto mientras getSize () devuelve cero.
Entonces, básicamente esto es lo que estoy obteniendo:
$collection->count(); //correct count
$collection->getSize(); //0
Pero quiero que getSize () tenga el recuento correcto, ya que decide si mostrar la paginación y los productos en la página de búsqueda o no. Estoy usando Inner Join, Left Join y Where solo en la colección para ser más específico.
¿Alguna idea de por qué tengo este problema extraño?
Gracias
ACTUALIZAR:
Mi pregunta anterior, ¿Cómo clonar la colección en Magento? Quería realizar dos operaciones diferentes en una colección. La primera colección muestra getSize () correcto, pero luego si getSize () es cero, eliminé la cláusula WHERE y le di una nueva condición WHERE. Después de esto, obtengo el SQL bruto correcto de lo que esperaba, y ejecutarlo en MySQL también proporciona un conjunto correcto de registros, pero solo getSize () en la colección está dando cero recuentos.
Básicamente, es posible que deba volver a cargar la colección, ya que getSize () está tomando el conteo anterior. ¿Tiene sentido?
fuente
getSize()
? ¡Gracias!CatalogSearch
módulo no hay nada que anulegetSize()
ogetSelectCountSql()
. Debería funcionar de manera predeterminada, a menos que haya agregado un código personalizado. ¿Puedes publicar la forma en que construyes la colección?_totalRecords
. Puede intentar clonar la colección antes de llamargetSize()
a la colección original. Quizás eso funcione.$sql = $collection->getSelectCountSql(); return $collection->getConnection()->fetchOne($sql);
Ten cuidado. Esto es correcto, pero los métodos se sobrescriben
Varien_Data_Collection_Db
según lo descrito por MariusSolo echa un vistazo a
Por lo tanto, en este nivel bajo debería ser el mismo. Ambos métodos cargan la colección y cuentan los artículos.
ACTUALIZAR
Oh, veo un problema: getSize () almacena en caché los _totalRecords, esto significa que no se recalcula. ¿Comprobar dónde
_totalRecords
está configurado?fuente
getSize()
?getSize()
no carga la colección de registros que provienen de la base de datos. No, a menos que anule el método y le diga que cargue la colección.echo count($collection->load()->getItems());
da la cuenta correcta, pero nuevamente quierogetSize()
trabajar.Esta respuesta aparece en google para "magento getSize incorrecto" y búsquedas similares, por lo que me gustaría agregar un posible escenario que podría ser útil para alguien
Cuando tiene una declaración de grupo en su consulta y hace un
Mysql devolverá un recuento para CADA grupo, por lo que Varien_Data_Collection_Db :: getSize () devolverá la respuesta incorrecta, esto se debe a que esta función busca la primera fila:
Cuando se llena
Selecciona la primera fila y, por lo tanto, devuelve el total del primer grupo como el tamaño total.
Terminé creando este código para contar, basado en los valores únicos de los atributos en mi consulta.
fuente
En caso de que termines aquí, hay otra solución simple para probar:
y selecciónelos todos (incluso si están indicando "Verde, no es necesario volver a indexar" y obligarlos a reindexar).
Esto resolvió mi
getSize()
problema vacío , que a su vez, permitió que las solicitudes de bases de datos especiales y nuevas encontraran los productos, cumplieran las condiciones "si" y se procesaran correctamente.fuente
Cuando
count($collection)
era diferente de lo$collection->getSize()
que tenía parareindex
los productos, entonces todo funcionó bien.fuente
Hay una diferencia principal Para getSize () la colección de productos no está cargada. Para count () cargará toda la colección de productos. Por lo tanto, para grandes catálogos no es aconsejable utilizar la función de conteo en ninguna colección.
fuente