How to get parent product id in magento?

47,655

Solution 1

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());

Solution 2

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
    }
}

Solution 3

Here is another solution for magento 1.7.2

$parentIds = Mage::getSingleton('catalog/product_type_configurable')->getParentIdsByChild($mageProduct->getId());

Solution 4

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;     
        }   
Share:
47,655
veilig
Author by

veilig

Code Monkey __ w c(..)o ( \__(-) __) /\ ( /(_)___) w /| | \ m m

Updated on March 12, 2020

Comments

  • veilig
    veilig about 4 years

    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?

    • balanv
      balanv over 12 years
      +1 for pasting code to get parent id...
  • veilig
    veilig almost 13 years
    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.
  • Simon
    Simon almost 13 years
    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.
  • KTastrophy
    KTastrophy over 10 years
    Just a note to others, depending on your catalog you may want to check configurable products first if they occur more frequently.
  • magic_al
    magic_al over 10 years
    You could use the constant Mage_Catalog_Model_Product_Type::TYPE_SIMPLE instead of "simple".
  • Hashid Hameed
    Hashid Hameed almost 9 years
    How is this going to work ? $product->getTypeInstance() will return simple product instance. Still we do not know what type is the parent product.
  • ahnbizcad
    ahnbizcad over 8 years
    how do you "take the configurable model"?
  • Simon
    Simon over 8 years
    @ahnbizcad Mage::getModel('catalog/product_type_configurable')