Lorsque j'utilise
$countSelect->columns('COUNT(DISTINCT e.entity_id)');
5 Réponses :
J'ai mis à jour le fichier
Les classes Varien peuvent être remplacées dans le répertoire app / code / local code> de la même manière que les classes de mage sont. Utilisez cela au lieu de «garder une piste pour les mises à niveau».
+1 à @Clockworkseek - 4 ans de travail de Magento solide et je ne savais jamais que vous pouviez remplacer lib / varien de l'application / code / local. À votre santé.
Pour clarifier: Copier lib / varien / data / Collection / db.php à l'application / code / local / varien / data / collection / db.php et modifiez-le là-bas.
Cela n'a pas fonctionné pour moi dans Magento 1.5 pour les collections de produits car la méthode est remplacée dans une classe enfant: mage_catalog_model_resource_év_mysql4_product_collection code> J'ai fait le changement là-bas. Mais je devais aussi faire d'autres changements pour la navigation en couches pour prendre en compte mon nombre de produits réduit.
Il vaut mieux réécrire la classe de collecte qui utilise le groupe par.
Merci, cela a sauvé ma journée! Mais comme l'a dit Steve Robbin, il est bien préférable de simplement mettre cette méthode dans votre propre classe de collecte modèle, car elle s'étend jusqu'à db.php
Est-ce que quelqu'un sait quel est l'équivalent de cela à Magento 2?
très bel article Voici quelques modifications que j'ai faites afin de le faire fonctionner pour moi
Les modifications suggérées dans DB.PHP ne sont pas nécessaires pour résoudre le groupe par collecte de catalogues. J'ai fait le changement similaire dans Catalogue-> Modèle-> Ressource-> EAV-> MySQL4-> Produit-> Collection.php Voici le code que j'ai ajouté à GetSelectCounttsQL () P>
if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { $countSelect->reset(Zend_Db_Select::GROUP); }
Je l'ai fait sans toucher les fichiers de base en remplaçant la méthode Getize () de ma collection.
public function getSize() { if (count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { // Create a new collection from ids because we need a fresh select $ids = $this->getAllIds(); $new_coll = Mage::getModel('module_key/model')->getCollection() ->addFieldToFilter('id', array('in' => $ids)); // return the collection size return $new_coll->getSize(); } return parent::getSize(); }
Dans certains cas, la méthode d'Eric ne fonctionne pas.
Il est préférable de réécrire la méthode getiser () code> à p>
J'ai résolu ceci à l'aide de la fonction ci-dessous:
public function getSize() { return sizeof( $this->getAllIds()); }
Pourquoi n'utilisez-vous pas simplement un compte PHP normal () sur la collection renvoyée?
Parce que c'est une chose mysql, pas une chose PHP. Lorsque vous appelez Comptez sur une collection, PHP appelle la fonction qui exécute une requête MySQL.