Magento – Get product collection only for “parent Products and Catalog Search visibility” products

collection-filteringmagento-1.9productproduct-collectionprogrammatically

I am working on product collection, my requirement is display only parent Products and Catalog Search visibility products only.

$collection = mage::getModel('catalog/product')->getCollection()->joinTable('catalog/product_relation', 'child_id=entity_id', array(
            'parent_id' => 'parent_id'
        ), null, 'left')->addAttributeToFilter(array(
            array(
                'attribute' => 'parent_id',
                'null' => null
            )
        ));
$visibility = array(
                Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
                Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
                );

               $collection->addAttributeToFilter('visibility', $visibility);

But this is not giving correct result of product collection.My all products which are present in both cases are not display in my collection.

Best Answer

Use this:

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToFilter('visibility', 4);
$collection->joinTable('catalog/product_relation', 'child_id=entity_id', array(
            'parent_id' => 'parent_id'
        ), null, 'left')->addAttributeToFilter(array(
            array(
                'attribute' => 'parent_id',
                'null' => null
            )
        ));