17

How to create Magento 2 Product Attribute Programmatically with type : Text Area.

1

2 Answers 2

41

Overview of Adding Product Attribute Programmatically

  • Step 1: Create file InstallData.php
  • Step 2: Define the install() method
  • Step 3: Create custom attribute

Step 1: Create file InstallData.php

We will start with the InstallData class which located in

app/code/Mageplaza/HelloWorld/Setup/InstallData.php. 

The content for this file:

<?php
namespace Mageplaza\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

}

Step 2: Define the install() method

<?php

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{

}

Step 3: Create custom attribute Here are all lines code of InstallData.php to create product attribute programmically.

<?php
namespace Mageplaza\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->addAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'sample_attribute',
            [
                'type' => 'int',
                'backend' => '',
                'frontend' => '',
                'label' => 'Sample Atrribute',
                'input' => '',
                'class' => '',
                'source' => '',
                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                'visible' => true,
                'required' => true,
                'user_defined' => false,
                'default' => '',
                'searchable' => false,
                'filterable' => false,
                'comparable' => false,
                'visible_on_front' => false,
                'used_in_product_listing' => true,
                'unique' => false,
                'apply_to' => ''
            ]
        );
    }
}

As you can see, all the addAttribute method requires is: The type id of the entity which we want to add attribute The name of the attribute An array of key value pairs to define the attribute such as group, input type, source, label…

All done, please run the upgrade script php bin/magento setup:upgrade to install the module and the product attribute sample_attribute will be created.

If you want to remove product attribute, you can use method removeAttribute instead of addAttribute. It will be like this:

EDIT:

for uninstall create the app/code/Mageplaza/HelloWorld/Setup/Uninstall.php.

<?php
namespace Mageplaza\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UninstallInterface;

class Uninstall implements UninstallInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    public function uninstall(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->removeAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'sample_attribute');
    }
}

Also you can follow below URL for creating custom product attribute.

URL : https://www.mageplaza.com/magento-2-module-development/magento-2-add-product-attribute-programmatically.html

7
0

If someone interested from where those magic property are:

For all attribute types you can check \Magento\Eav\Model\Entity\Setup\PropertyMapper::map method. In $this->_getValue($input, 'input', 'text') - 'input' is a key which you can use in eavSetup->addAttribute(), - 'text' - is default value for 'input`.

Special for catalog attributes (product,category) you can check \Magento\Eav\Model\Entity\Setup\PropertyMapperAbstract\PropertyMapper::map.

Mappers for other attribute types in image bellow:

enter image description here

Note: if you don't specify some property in eavSetup->addAttribute() which don't have default value - null will be used.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.