Распродажа: получить родительский продукт из идентификатора дочернего продукта


Я ищу код, который может помочь мне получить идентификатор родительского продукта из идентификатора дочернего продукта, и оба эти продукта связаны с использованием функции повышения продаж

До сих пор мне удавалось извлекать идентификатор дочерних продуктов из идентификатора родителя, используя приведенный ниже код

   //Get product detail using product id  (Suppose you have product id is : $product_id)
   $_product = Mage::getModel('catalog/product')->load($product_id);

   // Fetch list of upsell product using query.
   $upsell_product = $_product->getUpSellProductCollection(); 

Но я хочу сделать обратное

Это решение также сработало

$childProductId = 17;//edit this value, or get it by $product->getId()
$productsLinkedAsUpsell = Mage::getModel('catalog/product_link')->getCollection()
        ->addFieldToFilter('linked_product_id', $childProductId)
        ->addFieldToFilter('link_type_id', Mage_Catalog_Model_Product_Link::LINK_TYPE_UPSELL);
foreach ($productsLinkedAsUpsell as $upsell) {
    $parentId = $upsell->getProductId();
}
Author: Deepak Mallah, 2013-10-04

4 answers

Следующий код будет:

  1. Получить экземпляр ссылки текущего продукта,
  2. Фильтр на основе столбца linked_product_id в таблице catalog_product_link,
  3. Вызов useUpSellLinks гарантирует, что будут возвращены только ссылки на повышение продаж,
  4. Предоставить вам коллекцию всех ссылок, в которых этот продукт указан в идентификаторе linked_product_id,

Затем вы можете выполнить цикл по коллекции и получить атрибут product_id, который будет родительским.

//Get product detail using product id  (Suppose you have product id is : $product_id)
$_product = Mage::getModel('catalog/product')->load($product_id);

// Fetch list of upsell product using query.
$_linkInstance = $_product->getLinkInstance();
/* @var $collection Mage_Catalog_Model_Resource_Product_Link_Collection */
$collection = $_linkInstance->useUpSellLinks()->getLinkCollection();
$collection->addFieldToFilter('linked_product_id',  array('eq' => $_product->getId()));
$collection->addLinkTypeIdFilter();
$collection->joinAttributes();

foreach($collection as $upsellproduct) {
    $upsellproduct->getProductId();
}
 2
Author: David Manners, 2013-10-04 11:59:35

Быстрый и грязный способ сделать это:

$productId = 1;
$collection = Mage::getModel('catalog/product')->getCollection();
//$collection->addAttributeToSelect('*');//if you want all the attributes
$select = $collection->getSelect();
$joinCondition = array(
    'links.linked_product_id = e.entity_id',
    'links.link_type_id = '. Mage_Catalog_Model_Product_Link::LINK_TYPE_UPSELL
);
$select->join(
    array('links' => $collection->getTable('catalog/product_link')),
    implode(' AND ', $joinCondition),
    array('link_id')
);
$select->where('links.linked_product_id = ?', (int)$productId);
foreach ($collection as $item){
    //do something with $item
}
 3
Author: Marius, 2013-10-04 12:06:44

Если вы хотите получить родительский (настраиваемый) продукт дочернего продукта в списке продуктов или шаблоне страницы просмотра продукта в magento, вы можете добиться этого, используя код в 1 строку, как показано ниже:

if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId()))
echo $product->getName();

Ссылка: http://magentomonsters.com/get-parent-product-of-child-product-in-magento/

 1
Author: Arslan Hashim, 2015-02-28 15:15:26

Для связанных, продаваемых, перекрестных продуктов также можно использовать

$parentIds = $product->getLinkInstance()->getResource()
    ->getParentIdsByChild($product->getId(), Mage_Catalog_Model_Product_Link::LINK_TYPE_RELATED);
 1
Author: Alexander, 2015-08-19 11:03:45