Magento2.3 – How to Add Option Value for Product Attribute

magento2.3php-7.2

How to give the option value for the product attribute programmatically.

I need to give the option value for manufacturer attribute drop down field.

I have created admin grid for manufacturer details.

I need to get the option value of manufacturer attribute is taken from custom admin grid.

How to do this.

Best Answer

I guess you would like to render the Manufacturer options in the attribute dropdown from a custom Manufacturer table?

If yes, You have to write the UpgradeData schema for your module and update the existing Manufacturer source model to your custom source model class. Finally, Your source model class will look like:

<?php
namespace CompanyNamespace\Manufacturer\Model\Attribute\Source;
use Magento\Framework\DB\Ddl\Table;

class Manufacturer extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
{
    public $manufacturer;
    public function __construct(
        \CompanyNamespace\Manufacturer\Model\ResourceModel\Manufacturer\Collection $manufacturer
    ) {
        $this->manufacturer = $manufacturer;
    }

    public function getAllOptions()
    {   
        if (null === $this->_options) {
            foreach($this->manufacturer as $manufacturer) {
                $this->_options[] = [
                    'label' => $manufacturer->getContactName(),
                    'value' =>  $manufacturer->getId()
                ];
            }
        }
        return $this->_options;
    }

    public function getOptionText($value)
    {
        foreach ($this->getAllOptions() as $option) {
            if ($option['value'] == $value) {
                return $option['label'];
            }
        }
        return false;
    }

    public function getFlatColumns()
    {
        $attributeCode = $this->getAttribute()->getAttributeCode();

        return [
            $attributeCode => [
                'unsigned' => false,
                'default' => null,
                'extra' => null,
                'type' => Table::TYPE_INTEGER,
                'nullable' => true,
            ],
        ];
    }

    public function getFlatUpdateSelect($store)
    {
        return $this->optionFactory->create()->getFlatUpdateSelect($this->getAttribute(), $store, false);
    }
}
Related Topic