Magento 2自定义客户属性的值未保存在数据库中?


11

我在新模块中(通过:app / code /.../ Setup / InstallData.php)为客户注册页面添加了两个自定义属性(备用电子邮件和备用号码)。

我已经在自定义主题中设计了它的“视图”(通过覆盖register.phtml)。现在,我可以在注册页面上看到新字段。但是,新字段(备用电子邮件和号码)中的数据未保存在数据库中。

'customer_entity_int'保存'0'值。''customer_entity_varchar'不保存任何内容。

在此处输入图片说明

在屏幕的此处,您可以看到该值已保存为“ 0”。attribute_id 132用于注册页面上的“备用联系人号码”。因此,我希望该值保存我在前端注册页面上输入的数据。

我究竟做错了什么 ?


您是否使用自定义扩展名添加了客户属性?
Kishan Patadia

我通过自定义模块(app / code /.../ Setup / InstallData.php)添加了它,并通过覆盖'phtml'文件使其通过自定义的新主题成为“视图”。–
Kartik

保存数据之前。打印模型并检查您的值是否在那里。
金舒克Deb

您是否重新索引并清除了缓存?
Kishan Patadia

如果在打印模型后其仍然显示正确的值,请尝试记录查询并检查查询的生成方式,并查看该查询中是否存在您的值。要打开对app / etc / di.xml ...的搜索Quiet,您将只发现1个出现并将其更改为File。现在打开文件Magento\Framework\DB\Logger\File并设置$logAllQueries为true。并刷新浏览器并打开生成的文件var/debug/db.log。找到您的查询并检查查询。
金舒克Deb

Answers:


20

您可能已经解决了您的问题,但是对于像我这样来自Google的人来说,有一个解决方案:

创建客户属性时,请注意以下事项:

将属性添加到属性集,组

customer_eav_attribute
eav_entity_attribute

属性分配给客户表单

customer_form_attribute

最后一个是最重要的,人们只是跳过它,想知道为什么客户属性不希望从后端保存:请确保将“ customer_eav_attribute”表中的“ is_system”标志设置为0,否则将属性将不会保存。

可以通过在安装/升级脚本中的属性参数中将属性选项设置为“ system” => 0来完成。

毕竟不要忘记刷新缓存!

直接链接到解决方案


我可以通过is_system = 0保存属性,但是您可以让我知道为什么我们需要将其设置为0吗?在表中默认为其1
bhargav shastri

1
@bhargav shastri,因为is_system属性属于Magento
user2804


0

A.Maksymiuk的回答颇有魅力。这里是我为了解决属性问题而创建的SQL脚本(MySQL / Maria DB):

# Sets up attribute_id to be changed
select @ATTRIBUTE_ID := attribute_id from eav_attribute where attribute_code  = 'attribute_code';

# Refence attribute_id to be used to create the group (here customer email) 
SELECT @REFENCENCE_ATTRIBUTE_ID := attribute_id FROM eav_attribute where entity_type_id = 1 AND attribute_code = 'email';

# Verifies it exists in the customer table
SELECT * FROM customer_eav_attribute WHERE attribute_id = @ATTRIBUTE_ID;

# Fixes is_system issue
UPDATE customer_eav_attribute SET is_system = 0 WHERE attribute_id = @ATTRIBUTE_ID;

# Fixes group issue using same values as the customer email attribute
INSERT INTO eav_entity_attribute 
SELECT null, entity_type_id, attribute_set_id, attribute_group_id, @ATTRIBUTE_ID, 100
FROM eav_entity_attribute 
WHERE attribute_id IN (@REFENCENCE_ATTRIBUTE_ID) 
LIMIT 1;

干杯,

雷纳托

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.