Как добавить несколько атрибутов в InstallData Magento 2

#php #magento #magento2 #magento-1.9

#php #magento #magento2 #magento-1.9

Вопрос:

Пожалуйста, укажите, как добавить несколько атрибутов в один скрипт InstallData

Ответ №1:

Magento 2 использует скрипты данных для добавления атрибутов. В папке Vendor/Module /Setup/Patch /Data добавьте файл .php (например: AddCustomerAttributes)

Следующее добавит несколько атрибутов клиента. После добавления этой команды bin/ magento setup:upgrade требуется.

В patch_list datatable будет добавлена запись, если файл сценария был выполнен правильно, а также, конечно, атрибуты в таблице атрибутов eav.

 <?php
namespace VendorModuleSetupPatchData;

use MagentoCustomerModelCustomer;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;

class AddCustomerAttributes implements DataPatchInterface
{
    /**
     * @var ModuleDataSetupInterface
     */
    protected $moduleDataSetup;

    /**
     * @var CustomerSetupFactory
     */
    protected $customerSetupFactory;

    /**
     * @var AttributeSetFactory
     */
    protected $attributeSetFactory;

    /**
     * AddCustomerPhoneNumberAttribute constructor.
     * @param ModuleDataSetupInterface $moduleDataSetup
     * @param CustomerSetupFactory $customerSetupFactory
     * @param AttributeSetFactory $attributeSetFactory
     */
    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup,
        CustomerSetupFactory $customerSetupFactory,
        AttributeSetFactory $attributeSetFactory
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
        $this->customerSetupFactory = $customerSetupFactory;
        $this->attributeSetFactory = $attributeSetFactory;
    }

    /**
     * {@inheritdoc}
     */
    public function apply()
    {
        $customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);

        $customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
        $attributeSetId = $customerEntity->getDefaultAttributeSetId();

        $attributeSet = $this->attributeSetFactory->create();
        $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        /** attribute_1 */
        $customerSetup->addAttribute(
            Customer::ENTITY,
            'attribute_1',
            [
                'type' => 'text',
                'label' => 'Attribute One',
                'input' => 'text',
                'required' => false,
                'user_defined' => true,
                'sort_order' => 1000,
                'position' => 1000,
                'default' => 0,
                'system' => 0
            ]
        );

        $attribute = $customerSetup->getEavConfig()->getAttribute(
            Customer::ENTITY,
            'attribute_1'
        );

        $attribute->addData(
            [
                'attribute_set_id' => $attributeSetId,
                'attribute_group_id' => $attributeGroupId,
                'used_in_forms' => ['adminhtml_customer']
            ]
        );

        $attribute->save();

        /** attribute_2 */
        $customerSetup->addAttribute(
            Customer::ENTITY,
            'attribute_2',
            [
                'type' => 'int',
                'label' => 'Attribute Two',
                'input' => 'select',
                'source' => 'VendorModuleModelOptions',
                'required' => false,
                'user_defined' => true,
                'sort_order' => 1000,
                'position' => 1000,
                'default' => 0,
                'system' => 0
            ]
        );

        $attribute = $customerSetup->getEavConfig()->getAttribute(
            Customer::ENTITY,
            'attribute_2'
        );

        $attribute->addData(
            [
                'attribute_set_id' => $attributeSetId,
                'attribute_group_id' => $attributeGroupId,
                'used_in_forms' => ['adminhtml_customer']
            ]
        );

        $attribute->save();
    }

    /**
     * {@inheritdoc}
     */
    public static function getDependencies()
    {
        return [];
    }

    /**
     * {@inheritdoc}
     */
    public function getAliases()
    {
        return [];
    }
}
  

Пожалуйста, дайте мне знать, если вам нужна помощь с чем-либо по этому поводу.

Комментарии:

1. Спасибо за ответ. Позвольте мне проверить и подтвердить, работает ли он нормально или нет 🙂

2. Эй, не могли бы вы сказать мне, что, если это удобный подход для добавления пользовательских атрибутов с использованием исправления данных? Можете ли вы предоставить решение в installdata.php файл?

Ответ №2:

спасибо за вышеупомянутое решение с использованием исправлений. Это работает, и я использовал ту же методологию, используя InstallData/UpgradeData.php в соответствии с моим требованием.

Пожалуйста, проверьте мой ответ, это сохранит данные в базе данных в таблице customer_entity_varchar и атрибуты в eav_attribute. Проверьте код:

 <?php
namespace CustomB2BRFQModuleSetup;

use MagentoCustomerModelCustomer;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupUpgradeDataInterface;
use MagentoCustomerSetupCustomerSetupFactory;
use MagentoEavModelEntityAttributeSetFactory as AttributeSetFactory;

class UpgradeData implements MagentoFrameworkSetupUpgradeDataInterface
{
private $eavSetupFactory;

private $eavConfig;

private $attributeResource;

private $customerSetupFactory;

/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;

protected $moduleDataSetup;


public function __construct(
MagentoEavSetupEavSetupFactory $eavSetupFactory,
MagentoEavModelConfig $eavConfig,
MagentoCustomerModelResourceModelAttribute $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();


}
}
?>