phpmagentomagento2magento-1.9

How to add multiple attributes in InstallData Magento 2


Please specify how to add multiple attributes in single InstallData script


Solution

  • thanks for the above solution using patches. It's working and I used the same methodology using InstallData/UpgradeData.php according to my requirement.

    Please check my answer This will save the data in the database in table customer_entity_varchar and attributes in eav_attribute. Check the code:

    <?php
    namespace CustomB2BRFQ\Module\Setup;
    
    use Magento\Customer\Model\Customer;
    use Magento\Framework\Setup\ModuleContextInterface;
    use Magento\Framework\Setup\ModuleDataSetupInterface;
    use Magento\Framework\Setup\UpgradeDataInterface;
    use Magento\Customer\Setup\CustomerSetupFactory;
    use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;
    
    class UpgradeData implements \Magento\Framework\Setup\UpgradeDataInterface
    {
    private $eavSetupFactory;
    
    private $eavConfig;
    
    private $attributeResource;
    
    private $customerSetupFactory;
    
    /**
    * @var AttributeSetFactory
    */
    protected $attributeSetFactory;
    
    protected $moduleDataSetup;
    
    
    public function __construct(
    \Magento\Eav\Setup\EavSetupFactory $eavSetupFactory,
    \Magento\Eav\Model\Config $eavConfig,
    \Magento\Customer\Model\ResourceModel\Attribute $attributeResource,
    CustomerSetupFactory $customerSetupFactory,
    AttributeSetFactory $attributeSetFactory,
    ModuleDataSetupInterface $moduleDataSetup
    ) {
    $this->eavSetupFactory = $eavSetupFactory;
    $this->eavConfig = $eavConfig;
    $this->attributeResource = $attributeResource;
    $this->customerSetupFactory = $customerSetupFactory;
    $this->attributeSetFactory = $attributeSetFactory;
    $this->moduleDataSetup = $moduleDataSetup;
    
    }
    
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
    
    $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
    //$customerSetup->removeAttribute(Customer::ENTITY, "phonenumber");
    
    $customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
    $attributeSetId = $customerEntity->getDefaultAttributeSetId();
    
    $attributeSet = $this->attributeSetFactory->create();
    $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
    
    
    /** attribute_1 */
    $customerSetup->addAttribute(
    Customer::ENTITY,
    'phonenumber',
    [
    'type' => 'varchar',
    'label' => 'Phone Number',
    'input' => 'text',
    'required' => true,
    'visible' => true,
    'user_defined' => true,
    'sort_order' => 991,
    'position' => 991,
    'system' => 0,
    
    ]
    );
    
    $attribute = $customerSetup->getEavConfig()->getAttribute(
    Customer::ENTITY,
    'phonenumber'
    );
    
    $attribute->addData(
    [
    'attribute_set_id' => $attributeSetId,
    'attribute_group_id' => $attributeGroupId,
    'used_in_forms' => ['adminhtml_customer',
    'customer_account_create',
    'customer_account_edit']
    ]
    );
    
    $attribute->save();
    
    /** attribute_2 */
    $customerSetup->addAttribute(
    Customer::ENTITY,
    'gstnumber',
    [
    'type' => 'varchar',
    'label' => 'GST Number',
    'input' => 'text',
    'required' => true,
    'visible' => true,
    'user_defined' => true,
    'sort_order' => 992,
    'position' => 992,
    'system' => 0,
    ]
    );
    
    $attribute = $customerSetup->getEavConfig()->getAttribute(
    Customer::ENTITY,
    'gstnumber'
    );
    
    $attribute->addData(
    [
    'attribute_set_id' => $attributeSetId,
    'attribute_group_id' => $attributeGroupId,
    'used_in_forms' => ['adminhtml_customer',
    'customer_account_create',
    'customer_account_edit']
    ]
    );
    
    $attribute->save();
    
    
    }
    }
    ?>