How to get parent product id in magento?
Asked Answered
H

5

23

I know that in Magento 1.4.2.0 one gets parent id's like so

list( $parentId ) = Mage::getModel('catalog/product_type_configurable')
                            ->getParentIdsByChild( $product->getId() );

My question is: if I don't know what the parent is, how do I know to use the 'catalog/product_type_configurable' vs 'catalog/product_type_grouped' model to get the id?

Hoskins answered 10/8, 2011 at 16:41 Comment(1)
+1 for pasting code to get parent id...Gauthier
L
10

You may use:

$product->getTypeInstance();

Which will return the type object of your product

Then you can perform your:

->getParentIdsByChild()

Giving finally:

$product->getTypeInstance()->getParentIdsByChild($child->getId());
Leicester answered 21/3, 2012 at 12:38 Comment(1)
How is this going to work ? $product->getTypeInstance() will return simple product instance. Still we do not know what type is the parent product.Write
P
36

You can just call both and offer a fall-back as it should be one or the other:

if($product->getTypeId() == "simple"){
    $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($product->getId());
    if(!$parentIds)
        $parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
    if(isset($parentIds[0])){
        $parent = Mage::getModel('catalog/product')->load($parentIds[0]);
        // do stuff here
    }
}
Placable answered 7/8, 2012 at 1:34 Comment(2)
Just a note to others, depending on your catalog you may want to check configurable products first if they occur more frequently.Forbear
You could use the constant Mage_Catalog_Model_Product_Type::TYPE_SIMPLE instead of "simple".Boreal
L
10

You may use:

$product->getTypeInstance();

Which will return the type object of your product

Then you can perform your:

->getParentIdsByChild()

Giving finally:

$product->getTypeInstance()->getParentIdsByChild($child->getId());
Leicester answered 21/3, 2012 at 12:38 Comment(1)
How is this going to work ? $product->getTypeInstance() will return simple product instance. Still we do not know what type is the parent product.Write
D
8

Here is another solution for magento 1.7.2

$parentIds = Mage::getSingleton('catalog/product_type_configurable')->getParentIdsByChild($mageProduct->getId());
Dieppe answered 26/3, 2014 at 16:19 Comment(0)
U
1

we can use in block file,magento 2,

 protected $_catalogProductTypeConfigurable;

 public function __construct(
            \Magento\Catalog\Block\Product\Context $context,       
            //for getting parent id of simple
            \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $catalogProductTypeConfigurable,
            array $data = []
        ) {
               //for getting parent id of simple
            $this->_catalogProductTypeConfigurable = $catalogProductTypeConfigurable;
            parent::__construct($context, $data);
        }
    public function getProductData($id){ 
            $parentByChild = $this->_catalogProductTypeConfigurable->getParentIdsByChild($id);
            if(isset($parentByChild[0])){
                //set id as parent product id...
                $id = $parentByChild[0];          
            }
            return $id;     
        }   
Unger answered 4/12, 2015 at 7:3 Comment(0)
A
0

You could check the type of the product with $_product->getTypeId(); and if this returns 'configurable', take the configurable model and if it returns 'grouped' take the grouped model.

Hope this helps.

Assimilative answered 10/8, 2011 at 16:52 Comment(4)
not sure it does :( if you have a simple product and trying to get its parent (grouped or config) the getTypeId method will only return 'simple'...and you still don't know if you need to use the config or grouped model.Hoskins
I am sorry, you are absolutely right. So I do not know anything better than use both, the configurable and grouped model and then merge the results. You could also check which one returns an empty array and ignore this one.Assimilative
how do you "take the configurable model"?Childbed
@Childbed Mage::getModel('catalog/product_type_configurable')Assimilative

© 2022 - 2024 — McMap. All rights reserved.