Pregunta

Tengo un simple IndexController.

Cuando uso esto:

$collection = Mage::getModel('catalog/product')
                        ->getCollection()
                        ->addAttributeToSelect('*');
echo count($collection);

No muestra todo el producto (solo unos pocos), ¿cuál podría ser la razón de esto? Me gustaría cargar todos los productos, no importa cuál sea el estado.

ACTUALIZAR:Gracias a Alan Storm, encontré la respuesta. Al usar: echo (string) $collection->getSelect(); Yo vi: (_table_name.store_id = 5)

Al configurarlo en StoreID 0 ('Admin', por lo tanto), pude ver todo el producto.

Suena lógico ... como siempre :-)

¿Fue útil?

Solución

Desafortunadamente, hay demasiadas razones para enumerar (o incluso saber) por qué su colección de productos puede no devolver todos los productos que cree que debería. Puede ser un error, puede ser una extensión que haya instalado, o puede ser un malentendido sobre lo que se devuelve en una colección predeterminada.

Afortunadamente, esto es algo relativamente simple para depurar. Puedes echar un vistazo al SELECT Declaración utilizada por la colección para completar sus objetos iniciales.

$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*'); 

echo (string) $collection->getSelect();  

Con ese SQL en la mano, debería ser bastante fácil saber por qué Magento no está devolviendo los objetos que cree que debería.

Otros consejos

Hay más de una forma de obtener el recuento de artículos en una colección. Desafortunadamente el PHP interno count La función probablemente no sea la forma más desempeñada.

Aquí hay otros dos para probar:

echo $collection->count();

echo $collection->getSize();

Lo que sospecho que está sucediendo es que su colección no es tan profunda como crees que es; Hay un problema de memoria con el PHP count función (itera la colección como una matriz); o count no es consciente de cuántos artículos realmente hay Debido a la carga perezosa, donde la colección no se está cargando en el momento en que está pidiendo su conteo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top