Search code examples
phpmagentocollections

Magento: how to merge two product collections into one?


if i have two product collections is there a way to merge them into one?

for example (my final intent isn't to actually just get a collection of 2 cats, this is just to illustrate the issue):

$collection1 = Mage::getModel('catalog/category')->load(148)->getProductCollection();
$collection2 = Mage::getModel('catalog/category')->load(149)->getProductCollection();

$merged_collection = merge_collections($collection1,$collection2);

any help would be appreciated!


Solution

  • Assuming the items you wish to group together are of the same type and exist in the database then you can do this:

    $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('*');
    

    Here I know to filter by entity_id because that is products' key field, like it is for most entity types, some flat tables have a different primary key. Often you can generalise that with one of the collection's getIdFieldName() method. Products are a bad example in this case because it's ID field name isn't filled out correctly.