Il peut être une question simple, mais je ne peux pas trouver la réponse. Comment puis-je savoir si ma collection n'a pas de données? P>
Je fais $ = données Mage :: getModel ( 'zzz / zzz') -> getCollection () code> si je fais un
$ datas-> getData () code> il retourne un tableau vide, mais comment puis-je savoir si ma collection n'a pas de données sans faire foreach ou getData? p>
7 Réponses :
Vous pouvez utiliser;
$collection = Mage::getModel('zzz/zzz')->getCollection(); var_dump($collection->count());
Ça a marché ! Je ne savais pas que nous pourrions compter. C'est génial merci.
@ user1682624, vous devez éviter d'utiliser compteur () code> avec votre collection. J'ai expliqué pourquoi dans mon post ci-dessous
Vous pouvez facilement simplement faire une déclaration IF comme SO:
if (!$datas->getData() || empty($datas->getData())) { // do things }
Désolé, c'était le genre de choses que je voulais éviter, i +1 pour la réponse. Merci.
/ ** * Récupérer la collecte Tous les articles comptent * * @return int * / $ Collection = mage :: getmodel ('aaa / bbb') -> getcollection () -> getiser (); p>
Ceci est le code utilisé dans la pagination, etc. et est recommandé. P>
où / ** * Retirerve Count of Collection Articles chargés * * @return int * / Compte de la fonction publique () P>
sera utile pour vérifier les données d'éléments chargés. p>
Vous devez éviter d'utiliser Le Avoir une grande collection (en particulier la collection EAV) permettra de charger toutes vos données de collecte - cela peut prendre beaucoup de temps. P > à la place, vous devriez utiliser en plus de celui-ci, après que La réponse si correcte devrait être la suivante: p> < Pré> xxx pré> p> compter code> ou vos collections. Voici pourquoi:
mage_core_model_resource_db_collection_abstract code> (modèle de collecte héritée par presque toutes les collections de Magento) n'a pas
compteur () code> défini, donc en utilisant
compte code> sur votre collection, vous vous retrouverez probablement avec
varien_data_collection :: comptage () code> qui est une très mauvaise option, car il s'agit d'une collection
charge () code> puis compte Les objets chargés: p>
varien_data_collection_db :: getize () code> méthode, qui exécutera la requête SQL pour obtenir le compte uniquement, beaucoup plus optimisée par rapport à la récupération de toutes sortes de données pour la charge de collecte: p>
charge code> ne peut être modifié de quelque manière que ce soit. Par exemple, vous ne pourrez pas appliquer des filtres supplémentaires d'ordre de tri de changement à un moment donné après l'utilisation de
Count () code>. P>
Merci pour cette réponse très détaillée! Accepté!
Je veux vraiment avoir signet cette réponse. Ou ajouter à la liste, sur mon profil, où je peux garder la réponse précieuse comme celle-ci.
Pour faire des choses en dehors du modèle lui-même, $ Collection-> articles code> travail? Serait-ce
$ Collection-> getItems () code>?
Exécution d'un nombre simple, standard PHP Donc, peu importe la façon dont vous le faites, vous ne pouvez toujours pas compter votre collection avant de savoir combien de résultats ont été renvoyés de la base de données, la méthode ci-dessus est correcte, mais signifie des appels de dB supplémentaires, d'abord compter, alors à charger. Une meilleure méthode est simplement de vous assurer que vous apportez votre () code> sur la collection va bien ici. Tant que vous avez correctement filtré votre collection, vous devez toujours avoir fait avant d'arriver au point de compter appeler la méthode
-> comptez (code> sur une collection convient également. Dès que vous manipulez la collection de quelque manière que ce soit, il sera chargé quelle que soit la méthode que vous utilisez, de sorte qu'un compte php
standard () code>, appelant le
-> comptez () code> méthode sur l'objet, en cours d'exécution à travers la collection avec un
foreach () code> chargera toutes la collection de la même manière que comme
charger () code>, en fait si vous tracez le < Code> Charger () Code> Méthode de retour, vous verrez qu'il exécute en réalité une standard PHP
foreach () code> pour charger les données de collecte. p>
Sélectionnez les instructions code> aussi précis que possible en les rétrécissant avec
où code> clauses et ainsi de suite. Si vous tirez l'objet Select à partir d'une collection, vous avez accès à toutes les méthodes Zend_DB_Select indiquées sur ici , c'est-à-dire p>
$ Collection-> GetSelect () -> où ('......... =?', $ var); code> p> p>
En réalité, cela n'aurait été retourné que 1 données ou vide, alors je cherchais le moyen le plus rapide de le faire.
Salut Jonathan, merci pour cette réponse. Comme vous l'identifiez correctement, la collection sera éventuellement chargée. La seule chose est la plus grande partie du temps que nous utilisons getiser code> pour identifier, avons-nous besoin de le charger ou non. L'utilisation la plus typique de
getiser code> - est de vérifier: notre collection contient-elle réellement des objets, puis procédez à (si elle le fait) ou d'arrêter votre logique de l'exécution (la collection ne sera donc pas chargée). En plus de cela, la collection peut être utilisée par peu de modules différents pour la préparer, il est donc possible d'utiliser
compteur code> dans une logique de l'autre (regarder la barre d'outils de catalogue)
Supposons que la collection de produits est $ pro_collection
Appliquez maintenant le code suivant .. p>
En plus des réponses acceptées, voir référence: p>
Testé pour 750 produits P>
Vous devriez donc aller avec forme: HTTPS: //magento.stackexchange.com/questions/179028/how-a-check-if-a-collection-has-items/179035#179035 SUP> P> $ Collection-> getdata () code> p>
$ Collection-> getiser () code> p>
$ Collection-> comptez () code> ou
Tailleof ($ Collection) code> p> p>
getize () code>. p>