Si j'ai deux collections de produits, il existe un moyen de les fusionner en un?
Par exemple (mon intention finale n'est pas de recevoir une collection de 2 chats, il s'agit simplement d'illustrer le problème): p> toute aide serait appréciée! p> p>
5 Réponses :
Je ne pense pas qu'il y ait une telle méthode, mais vous pouvez probablement faire quelque chose comme ça:
Vous pouvez filtrer votre collection directement sans utiliser 2.
$products = Mage::getModel('catalog/product'); $_collection = $products->getCollection(); ->addCategoryFilter(2) ->load();
Je ne peux pas filtrer puisque je vais recevoir les collections de deux manières différentes et ne pourra ajouter qu'un filtre. J'ai essayé Additem avant, mais lorsque vous passez à la page de gauche Nav & Listing Page, les chefs d'accusation sont tous foirés.
Oh je suis désolé, je ne le sais pas. Avez-vous essayé au lieu de fusionner deux collections pour créer un troisième en fonction des données de vos collections précédentes? (E.G. ID)
Presque toutes les collections (ou toutes les?) de Magento hérite d'un Collection de données Varien . Une collection est un objet spécial qui contient des objets d'un autre type. Il n'y a pas de méthode de fusion de collections, mais vous pouvez ajouter des éléments supplémentaires du type approprié à la collection.
Code comme ceci devrait vous permettre d'aller où vous voulez aller, bien qu'il existe probablement des moyens plus efficaces de boucler et de faire la fusion réelle. p>
Le problème ici est que vous risquez d'obtenir une exception: élément (mage_catalog_model_product) avec le même identifiant "***" existe déjà code>
En supposant que les éléments que vous souhaitez regrouper sont du même type et existent dans la base de données, vous pouvez le faire:
$collection1 = Mage::getModel('catalog/category')->load(148)->getProductCollection(); $collection2 = Mage::getModel('catalog/category')->load(149)->getProductCollection(); $merged_ids = array_merge($collection1->getAllIds(), $collection2->getAllIds()); // can sometimes use "getLoadedIds()" as well $merged_collection = Mage::getResourceModel('catalog/product_collection') ->addFieldToFilter('entity_id', array('in' => $merged_ids)) ->addAttributeToSelect('*');
Cela nécessite 3 requêtes de base de données, mais la solution Haltabush ne nécessite que 2 requêtes de base de données. Je n'utiliserais pas cela s'il n'y a pas de filtres ou de traits supplémentaires nécessaires aux collections combinées.
Une note latérale .. addfieldofilter ('entity_id', $ fusible_ids) code> va traduire en
où (entité_id = 1001) ou (entité_id = 1002) ou (entité_id = 1003) ou (entité_id = 1003) ou ) Ou .... code> qui est plus lent que
in (1001, 1002, 1003, 1004) code> généré par
addfieldtofilter ('intity_id', tableau ('in' = > $ fusible_ids)) code>
Pour la collecte de produits de plusieurs catégories, vous pouvez utiliser le code suivant
$collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('name') ->addAttributeToSelect('sku'); $collection->getSelect() ->join( 'catalog_category_product', 'product_id=entity_id', array('category_id') ) ->where('catalog_category_product.category_id IN (?)', $categories);