无法更新 installData 中的用户属性

Posted

技术标签:

【中文标题】无法更新 installData 中的用户属性【英文标题】:cant update user attributes in installData 【发布时间】:2021-09-24 09:51:48 【问题描述】:

我创建自定义模块。 在我尝试在 InstallData.php 中添加自定义属性之后 我从 setup_module 中删除了我的模块以运行安装数据,但是我没有看到任何结果或错误。 我尝试运行 setup:upgrade c:c c:f

我想为用户信息添加自定义属性。在用户注册帐户后更新该信息。此外,我希望能够从管理区域和前端设置更改它。但现在我无法在管理员中看到它。 我应该添加任何额外的代码来运行它吗?

<?php

namespace Vendor\RewardPoints\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Customer\Setup\CustomerSetupFactory;
use Magento\Customer\Model\Customer;
use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;


/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface

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

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

    private $eavSetupFactory;

    /**
     * Init
     *
     * @param EavSetupFactory $eavSetupFactory
     */
    public function __construct(EavSetupFactory $eavSetupFactory, CustomerSetupFactory $customerSetupFactory, AttributeSetFactory $attributeSetFactory)
    
        $this->eavSetupFactory = $eavSetupFactory;
        $this->customerSetupFactory = $customerSetupFactory;
        $this->attributeSetFactory = $attributeSetFactory;
    

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

        /* Create customer attribute for front-end builder*/
        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
        $attributeSetId = $customerEntity->getDefaultAttributeSetId();

        /** @var $attributeSet AttributeSet */
        $attributeSet = $this->attributeSetFactory->create();
        $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        $customerSetup->addAttribute(Customer::ENTITY, 'my_telephone', [
            'type' => 'int',
            'label' => 'My telephone',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => true,
            'sort_order' => 1000,
            'is_used_in_grid' => 1,
            'is_visible_in_grid' => 1,
            'is_filterable_in_grid' => 1,
            'is_searchable_in_grid' => 1,
            'position' => 1000,
            'default' => 0,
            'system' => 0,
        ]);
        $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'my_telephone')
            ->addData([
                'attribute_set_id' => $attributeSetId,
                'attribute_group_id' => $attributeGroupId,
                'used_in_forms' => ['adminhtml_customer'],
            ]);

        $attribute->save();


    

【问题讨论】:

app/etc/config.php中的模块是否启用(设置为1)? 是的。问题是我没有模块:启用而不是设置:升级修复问题 【参考方案1】:

在文章Magento 2: How to make customer attribute? 中一步一步描述。 客户属性可以以不同的形式使用,本示例将在管理客户编辑页面显示客户属性。您也可以使用其他形式。例如: “used_in_forms” => [‘adminhtml_customer_address’, ‘customer_address_edit’, ‘customer_register_address’]

【讨论】:

是正确的。我必须模块:启用而不是 s:up。我只在做 s:up

以上是关于无法更新 installData 中的用户属性的主要内容,如果未能解决你的问题,请参考以下文章

无法以一对一关系更新拥有方的属性

尝试更新firestore中的数组时出现“TypeError:无法读取未定义的属性'arrayUnion'”

无法使用 Vue 从 TypeScript 中的基类更新属性

指令 Dragula 更新挂钩中的错误:“TypeError:无法读取未定义的属性 'drake'”

核心数据日期和布尔属性无法更新

TypeORM:保存时无法读取未定义的属性“inverseJoinColumns”