Impossible de charger tous les produits IndexController
-
16-10-2019 - |
Question
Je simple IndexController.
Quand j'utilise ceci:
$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*');
echo count($collection);
Il ne montre pas tout le produit (que quelques-uns), ce qui pourrait la raison de ce être? Je voudrais charger tous les produits, peu importe ce que l'état est.
Mise à jour:
Merci à Alan Tempête j'ai trouvé la réponse. En utilisant: echo (string) $collection->getSelect();
j'ai vu: (_table_name.store_id = 5)
En mettant à storeId 0 ( « admin » pour ainsi dire) j'ai pu voir tout le produit.
Sons logique ... comme toujours: -)
La solution
Malheureusement, il y a trop de raisons à la liste (ou même de savoir) pourquoi votre collection de produit peut ne retourneriez pas tous les produits que vous pensez qu'il devrait. Il peut être un bug, peut être une extension installée, ou peut être vous avez un malentendu quant à ce qui est retourné dans une collection par défaut.
Heureusement, cela est une chose relativement simple pour vous déboguer. Vous pouvez jeter un coup d'oeil à la déclaration de SELECT
utilisée par la collection pour remplir ses objets initiaux.
$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*');
echo (string) $collection->getSelect();
Avec cette SQL à la main, il devrait être assez facile de dire pourquoi Magento ne retourne pas les objets que vous pensez qu'il devrait.
Autres conseils
Il y a plus d'une façon d'obtenir le nombre d'éléments dans une collection. Malheureusement, la fonction count
interne PHP est probablement pas la façon la plus performante.
Voici deux autres à essayer:
echo $collection->count();
echo $collection->getSize();
Ce que je soupçonne que se passe est soit votre collection est pas aussi profond que vous pensez qu'il est; il y a un problème de mémoire avec la fonction count
PHP (itère la collection sous forme de tableau); ou count
ne connaît pas le nombre d'articles il y a effectivement en raison de de chargement paresseux, où la collection est pas réellement étant chargé vers le haut au moment où vous vous demandez son compte.