首页 > 解决方案 > 从子 SKU Magento 2 获取父 SKU(可配置或捆绑)

问题描述

在订单页面(后端)上,我需要能够使用子 SKU 获取父 SKU。

我已经尝试了从 Magento 论坛和 StackOverflow 上的类似问题中截取的几个代码,但没有成功。

我可以通过使用来确定产品是否只是没有父级的简单产品,getTypeId()但之后我尝试的一切都未能导致获得父级 SKU。

Magento 2.2.6

标签: phpmagento2

解决方案


configurable、bundle 和 grouped 都是不同的,需要不同的方式来获取它们的父级。这些方法在相关文件中列出。

Magento\ConfigurableProduct\Model\Product\Type\Configurable.php

/** 
* Retrieve configurable parent ids array by required child
*
* @param  int|array $childId
* @return array
*/
public function getParentIdsByChild($childId)
{
   return $this->_catalogProductTypeConfigurable->getParentIdsByChild($childId);
} 

Magento\Bundle\Model\Product\Type.php

/**
* Retrieve bundle parent ids array by required child
*
* @param int|array $childId
* @return array
*/
public function getParentIdsByChild($childId)
{
   return $this->_bundleSelection->getParentIdsByChild($childId);
}

Magento\GroupedProduct\Model\Product\Type\Grouped.php

/**
* Retrieve grouped parent ids array by requested child
*
* @param int|array $childId
* @return array
*/
public function getParentIdsByChild($childId)
{
   return $this->productLinks->getParentIdsByChild(
       $childId,
       \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
  );
}

最后,如果您需要从 mysql 快速获取 sku。

#Select parent of a sku
 SELECT
  parent.sku
FROM
  catalog_product_entity parent
WHERE parent.row_id =
  (SELECT
    relationship.parent_id
  FROM
    catalog_product_super_link relationship
  WHERE relationship.product_id =
    (SELECT
      child.entity_id
    FROM
      catalog_product_entity child
    WHERE child.sku = "SKU")
  );

推荐阅读