Webkul
Services
Technologies Bagisto QloApps
iOS Android SAP BigCommerce Wix
Trusted by
Samsung Intel Toyota Walmart Disney Nokia Nestlé Decathlon
See all customers
Back to Top
DEV

Update Product Custom Attribute Scope in Magento 2

Here we learn in Magento2 – How to update the product custom attribute’s scope in the custom module.
If you want to create a new custom attribute in Magento 2, you can check the wonderful blog here

Update Product Custom Attribute Scope in Magento 2

If there is an attribute with store view scope.

1st Method: Using the UpgradeData file

First, we need to create a file named UpgradeData.php in our custom module Setup folder.
complete path: app/code/ModuleNameSpace/YourModuleName/Setup/UpgradeData.php

<?php

namespace ModuleNameSpace\YourModuleName\Setup;

use Magento\Framework\Setup;
use Magento\Eav\Setup\EavSetupFactory;

class UpgradeData implements Setup\UpgradeDataInterface 
{
    /**
     * EAV setup factory
     *
     * @var EavSetupFactory
     */
    private $_eavSetupFactory;
    /**
     * @param EavSetupFactory  $eavSetupFactory
     */
    public function __construct(
        EavSetupFactory $eavSetupFactory
    ) {
        $this->_eavSetupFactory = $eavSetupFactory;
    }

    public function upgrade(
        Setup\ModuleDataSetupInterface $setup,
        Setup\ModuleContextInterface $moduleContext
    ) {
        $setup->startSetup();
        $eavSetup = $this->_eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->updateAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'your_attribute_code',
            'is_global', \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
        );
        $setup->endSetup();
    }
}

Now, you have to update the version of the module from the module.xml file.

2nd Method: Using Data Patch

In this method, we need to create a data patch file as UpdateAttributes.php in our custom module Setup folder. Note: You can also use the different file names and class names.
complete path: app/code/ModuleNameSpace/YourModuleName/Setup/Patch/Data/UpdateAttributes.php

To learn more about data and schema patches, click here.

<?php

namespace ModuleNameSpace\YourModuleName\Setup\Patch\Data;

use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;

class UpdateAttributes implements DataPatchInterface
{
    /**
     * @var ModuleDataSetupInterface
     */
    private $moduleDataSetup;
    /**
     * @var EavSetupFactory
     */
    private $eavSetupFactory;

    /**
     * @param ModuleDataSetupInterface $moduleDataSetup
     * @param EavSetupFactory $eavSetupFactory
     */
    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup,
        EavSetupFactory $eavSetupFactory
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
        $this->eavSetupFactory = $eavSetupFactory;
    }

    /**
     * Add eav attributes
     */
    public function apply()
    {
        /** @var EavSetup $eavSetup */
        $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);

        $eavSetup->updateAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'your_attribute_code',
            'is_global',
\Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
        );
    }

    /**
     * Get dependencies
     */
    public static function getDependencies()
    {
        return [];
    }

    /**
     * Get Aliases
     */
    public function getAliases()
    {
        return [];
    }
}

After adding these files, update your custom product attribute’s scope in your custom module in your Magento 2 instance by running the following command in your magento2 root directory through the terminal.

php bin/magento setup:upgrade
Update Product Custom Attribute Scope in Magento 2

now, the scope of the attribute changes to the Global

‘is_global’ flag is used instead of ‘global’ in updating the scope of an attribute.

Hope it will help you. Thank you.

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


2 comments

  • Shaun Lewandowski
    • Rajat Singh (Moderator)
  • Back to Top

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home