Как получить идентификатор родительского продукта в magento?

Я знаю, что в Magento 1.4.2.0 можно получить родительский идентификатор, например

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

Мой вопрос: если я не знаю, что такое родитель, как мне узнать, использовать ли модель «каталог/тип_продукта_настраиваемый» или «каталог/тип_продукта_сгруппированный» чтобы получить идентификатор?


person veilig    schedule 10.08.2011    source источник
comment
+1 за вставку кода для получения идентификатора родителя...   -  person balanv    schedule 15.02.2012


Ответы (5)


Вы можете использовать:

$product->getTypeInstance();

Который вернет тип объекта вашего продукта

Затем вы можете выполнить:

->getParentIdsByChild()

Даю наконец:

$product->getTypeInstance()->getParentIdsByChild($child->getId());
person eric ramahatra    schedule 21.03.2012
comment
Как это будет работать? $product-›getTypeInstance() вернет простой экземпляр продукта. Тем не менее мы не знаем, какой тип является исходным продуктом. - person Hashid Hameed; 30.05.2015

Вы можете просто позвонить обоим и предложить запасной вариант, поскольку это должно быть одно или другое:

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
    }
}
person Kus    schedule 07.08.2012
comment
Просто примечание для других: в зависимости от вашего каталога вы можете сначала проверить настраиваемые продукты, если они встречаются чаще. - person KTastrophy; 23.01.2014
comment
Вы можете использовать константу Mage_Catalog_Model_Product_Type::TYPE_SIMPLE вместо простой. - person magic_al; 24.01.2014

Вот еще одно решение для magento 1.7.2

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

мы можем использовать в блочном файле, 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;     
        }   
person Rakesh Jesadiya    schedule 04.12.2015

Вы можете проверить тип продукта с помощью $_product->getTypeId();, и если это возвращает «настраиваемый», возьмите настраиваемую модель, а если он возвращает «сгруппированный», возьмите сгруппированную модель.

Надеюсь это поможет.

person Simon    schedule 10.08.2011
comment
не уверен, что это так :( если у вас есть простой продукт и вы пытаетесь получить его родителя (сгруппированного или конфигурации), метод getTypeId вернет только «простой» ... и вы все еще не знаете, нужно ли вам использовать конфигурацию или сгруппированная модель. - person veilig; 10.08.2011
comment
Прошу прощения, вы абсолютно правы. Поэтому я не знаю ничего лучше, чем использовать как настраиваемую, так и сгруппированную модель, а затем объединить результаты. Вы также можете проверить, какой из них возвращает пустой массив, и игнорировать этот. - person Simon; 11.08.2011
comment
как вы принимаете настраиваемую модель? - person ahnbizcad; 17.02.2016
comment
@ahnbizcad Mage::getModel('catalog/product_type_configurable') - person Simon; 17.02.2016