0

I am trying to update attribute option label with attribute optionid.

Used below code.

class Attribute
 {
  protected $eavAttributeFactory;
  public function __construct(
   \Magento\Eav\Model\Entity\AttributeFactory $eavAttributeFactory
  ) {
    $this->eavAttributeFactory = $eavAttributeFactory;
 }

public function attributeUpdate() { 
  $attribute_code = 'color';
  $optionid = 12345;
  $option_label = 'red';
  $attr = $this->productAttributeRepository->get($attribute_code );
             $options = $attr->getOptions();
             $values = 0;
             foreach ($options as $option) {
                if ($option->getValue() == $magento_id) {
                    $option->setLabel($option_label);
                    //$option->setStoreLabels([$option_label]);
                    $attr->setOptions([$option]);                               
                    $this->productAttributeRepository->save($attr);                     
                    break;
                }
                $values++;

            }

}

Option id 12345 is Green now. I need to Update to Red. What code i need to use to update label of option. Please anyone help on this. Right now it is updating only in admin end. not for all stores, like in Default store view Label in empty. Thanks

11
  • please check my answer. Dec 14, 2018 at 12:53
  • @RohanHapani, It is updating only in Admin, but not in other Store views. can you look into it please? Dec 14, 2018 at 14:24
  • @RohanHapani, have u checked from ur end? foreach seems not correct Dec 15, 2018 at 6:09
  • I updated my answer. Dec 15, 2018 at 7:42
  • 1
    @RohanHapani, i am checking it. site is down now, will updated u once it worked Dec 17, 2018 at 5:15

1 Answer 1

1

Try to use this below code :

protected $_attributeFactory;

public function __construct(
    ....
    \Magento\Framework\App\Action\Context $context,
    \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attributeFactory
    ....
) {
    ....
    $this->_attributeFactory = $attributeFactory;
    parent::__construct($context);
    ....
}
public function yourFunction()
{
    $attribute_id = 93; //color attribute id
    $attribute = $this->_attributeFactory->load(93);

    $option_id = 213; // your option ID
    $opt_default_name = 'Red Lab';
    $opt_default_store = 'Red Lab';
    // $opt_2nd_store = 'Red Lab German'; //For other store

    $attribute->setData('option', array('value' => array(
        $option_id => array($opt_default_name, $opt_default_store)), //$opt_2nd_store add param here for other store
    ));
    $attribute->save();
}

For more you can take a look at \Magento\Eav\Model\ResourceModel\Entity\Attribute::_saveStoreLabels(AbstractModel $object)

14
  • hi @Rohan, its not worked for me Dec 14, 2018 at 13:07
  • Did you remove generated and flush cache? Dec 14, 2018 at 13:12
  • yes, got this error Uncaught TypeError: Argument 1 passed to Magento\\Eav\\Model\\Entity\\Attribute\\Option::setStoreLabels() Dec 14, 2018 at 13:12
  • Try to apply just setLabel() Dec 14, 2018 at 13:13
  • yes before used that one only, its not updated, is it necessary to use this line? $product_options->setOptions([$option]); Dec 14, 2018 at 13:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.