Quantcast
Channel: Webkul Blog
Viewing all articles
Browse latest Browse all 5554

How to get configurable associated products id in magento2

$
0
0

Here we’ll learn that how to get configurable associated products id  in magento2

Step1# : I’ll create Data.php class file in app/code/NameSpace/ModuleName/Helper

<?php

/**
 * TestModule helper data
 * @category  Webkul
 * @package   Webkul_TestModule
 * @author    Webkul
 * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com)
 * @license   https://store.webkul.com/license.html
 */

namespace NameSpace\ModuleName\Helper;

use Magento\Catalog\Model\Product;
use Magento\ConfigurableProduct\Model\Product\Type\Configurable as ConfigurableProTypeModel;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    /**
     * @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable
     */
    private $_configurableProTypeModel;

    /**
     * @var \Magento\Catalog\Model\Product
     */
    private $_product;

    /**
     * @param ConfigurableProTypeModel $configurableProTypeModel,
     * @param Product                  $product,
     */
    public function __construct(
        ConfigurableProTypeModel $configurableProTypeModel,
        Product $product
    ) {
        $this->_configurableProTypeModel = $configurableProTypeModel;
        $this->_product = $product;
        parent::__construct($context);
    }

    /**
     * return Congigurable associated product id.
     * @param object $productId
     * @param array  $nameValueList
     * @return bool|int
     */

    /* array structure 
       $nameValueList = [['Name'=>'Ram','Value'=>'3GB'],['Name'=>'Color','Value'=>'Red']] ;
    */
    public function getConfAssoProductId($productId, $nameValueList)
    {
        $assocateProId = false;
        //load product

        $product = $this->_product->load($productId);
        //get configurable products attributes array with all values with lable (supper attribute which use for configuration) 
        $optionsData = $product->getTypeInstance(true)->getConfigurableAttributesAsArray($product);
        $superAttrList = [];
        $superAttrOptions = [];
        $attributeValues = [];

        // prepare array with attribute values 
        foreach ($optionsData as $option) {
            $superAttrList[] = [
                'name' => $option['frontend_label'],
                'code' => $option['attribute_code'],
                'id' => $option['attribute_id']
            ];
            $superAttrOptions[$option['attribute_id']] = $option['options'];
            foreach ($nameValueList as $nameValue) {
                if ($nameValue['Name'] == $option['frontend_label']) {
                    foreach ($option['options'] as $attrOpt) {
                        if ($nameValue['Value'] == $attrOpt['label']) {
                            $attributeValues[$option['attribute_id']] = $attrOpt['value'];
                        }
                    }
                }
            }
        }

        if (count($attributeValues) == count($nameValueList)) {
            // pass this prepared array with $product 
            $assPro = $this->_configurableProTypeModel->getProductByAttributes($attributeValues, $product);
            // it return complete product accoring to attribute values which you pass
            $assocateProId = $assPro->getEntityId();
        }
        return $assocateProId;
    }
}

Thanks 🙂


Viewing all articles
Browse latest Browse all 5554

Trending Articles