How To Get Attribute ID, Name, Value From Attribute Code In Magento 2

How To Get Attribute ID, Name, Value From Attribute Code In Magento 2

In this Magento 2 tutorial, we will show you a quick way to get the attribute information including attribute name or label, id, entity_type, and so on from the attribute code.

Specific Steps To Get Attribute ID, Name, And Value

You can add the following code anywhere that you want.

/**
* Eav Entity Attribute Collection
*
* @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
*/
protected $_entityAttributeCollection;
 
/**
* @var \Magento\Eav\Model\Entity\Attribute
*/ 
protected $_entityAttribute;
 
/**
* @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection
*/ 
protected $_attributeOptionCollection;
    
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $eavEntityAttributeCollection
* @param array $data
*/
public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $entityAttributeCollection,
    \Magento\Eav\Model\Entity\Attribute $entityAttribute,
    \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $attributeOptionCollection,
    array $data = []
) {
    $this->_entityAttributeCollection = $entityAttributeCollection; 
    $this->_entityAttribute = $entityAttribute;
    $this->_attributeOptionCollection = $attributeOptionCollection;
 
    parent::__construct($context, $data);
}
 
/**
* Load attribute data by code
*
* @param   mixed $entityType    Can be integer, string, or instance of class Mage\Eav\Model\Entity\Type
* @param   string $attributeCode
* @return  \Magento\Eav\Model\Entity\Attribute
*/
public function getAttributeInfo($entityType, $attributeCode)
{
    return $this->_entityAttribute
                ->loadByCode($entityType, $attributeCode);
}
 
/**
* Get all options of an attribute
*
* @param   int $attributeId
* @return  \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection
*/
public function getAttributeOptionAll($attributeId)
{
    return $this->_attributeOptionCollection
                ->setPositionOrder('asc')
                ->setAttributeFilter($attributeId)
                ->setStoreFilter()
                ->load();
}
 
/**
* Get attribute option data of a single option of the attribute
*
* @param   int $attributeId
* @param   int $optionId
* @return  \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection
*/
public function getAttributeOptionSingle($attributeId, $optionId)
{
    return $this->_attributeOptionCollection
                ->setPositionOrder('asc')
                ->setAttributeFilter($attributeId)
                ->setIdFilter($optionId)
                ->setStoreFilter()
                ->load()
                ->getFirstItem();
}
 
/**
* Get attributes by code
* Multiple entity types can have same attribute code
* Entity types 'catalog_product' & 'catalog_category' both have 'name' attribute code
* So, this function can return object of size greater than 1
*
* @return Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
*/ 
public function getAttributesByCode($code) {
    $this->_entityAttributeCollection->getSelect()->join(
                ['eav_entity_type'=>$this->_entityAttributeCollection->getTable('eav_entity_type')],
                'main_table.entity_type_id = eav_entity_type.entity_type_id',
                ['entity_type_code'=>'eav_entity_type.entity_type_code']);                
    
    $attributes = $this->_entityAttributeCollection->setCodeFilter($code);
    
    return $attributes;
}
 
/**
* Get single product attribute data 
*
* @return Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
*/
public function getProductAttributeByCode($code) {
    $this->_entityAttributeCollection->getSelect()->join(
                ['eav_entity_type'=>$this->_entityAttributeCollection->getTable('eav_entity_type')],
                'main_table.entity_type_id = eav_entity_type.entity_type_id',
                ['entity_type_code'=>'eav_entity_type.entity_type_code']);                
    
    $attribute = $this->_entityAttributeCollection
                      ->setCodeFilter($code)
                      ->addFieldToFilter('entity_type_code', 'catalog_product')
                      ->getFirstItem();
    
    return $attribute;
}

For example, here, we will fetch the attribute data for the attribute “manufacturer” of “product”.

$attributeCode = ‘manufacturer’;
$entityType = 'catalog_product';
 
$attributeInfo = $block->getAttributeInfo($entityType, $attributeCode);
//var_dump($attributeInfo->getData());
 
$attributeId = $attributeInfo->getAttributeId();
$optionId = 49; // YOUR_OPTION_ID
 
$attributeOptionAll = $block->getAttributeOptionAll($attributeId);
//var_dump($attributeOptionAll->getData());
 
$attributeOptionSingle = $block->getAttributeOptionSingle($attributeId, $optionId);
//var_dump($attributeOptionSingle->getData());

Wrapping Up

We’ve just given you detailed instructions on how to get the attribute ID, name, and value by using the attribute code.

Hope you guys find this tutorial useful. If you have any problems when applying the code, feel free to ask us by leaving a comment.