Значения пользовательских атрибутов клиента Magento 2 не сохраняются в базе данных?

11

Я добавил два пользовательских атрибута для страницы регистрации клиента (альтернативный адрес электронной почты и альтернативный номер) в новом модуле (через: app / code /.../ Setup / InstallData.php).

Я разработал его «представление» внутри пользовательской темы (переопределив register.phtml). Теперь я вижу новые поля на странице регистрации. Однако данные внутри новых полей (альтернативный адрес электронной почты и номер) не сохраняются в базе данных.

'customer_entity_int' сохраняет значение '0' .. 'customer_entity_varchar' ничего не сохраняет ..

введите описание изображения здесь

Здесь на экране вы можете видеть, что значение сохраняется как «0». Атрибут attribute_id 132 для «Альтернативного контактного номера» на странице регистрации. Поэтому я ожидаю, что значение будет содержать данные, которые я ввожу на странице регистрации внешнего интерфейса.

Что я делаю неправильно ?

Картик
источник
Вы добавили атрибуты клиента, используя пользовательское расширение?
Кишан Патадия
Я добавил его через пользовательский модуль (приложение / код /.../ Setup / InstallData.php) и сделал это «вид» с помощью настраиваемой новой темы, перекрывая «» PHTML файла ..
Картики
Перед сохранением данных .. распечатайте модель и проверьте, есть ли ваши значения.
Кингшук Деб
Вы переиндексировали и очищали кеш?
Кишан Патадия
Если после печати модели все еще отображаются правильные значения, попробуйте зарегистрировать запрос и проверить, как генерируется запрос, и посмотрите, есть ли в этом запросе ваши значения. Для этого откройте приложение / etc / di.xml ... search Quiet, вы найдете только 1 вхождение и измените его на File. Теперь откройте файл Magento\Framework\DB\Logger\Fileи установите $logAllQueriesзначение true. и обновите браузер и откройте сгенерированный файл var/debug/db.log. Найдите свой запрос и проверьте запрос.
Кингшук Деб

Ответы:

20

Вы, вероятно, решили свою проблему, но для людей, которые приходят сюда с Google, как я, есть решение:

При создании атрибута customer, пожалуйста, позаботьтесь о следующих вещах:

Атрибут добавлен в набор атрибутов, группа

customer_eav_attribute
eav_entity_attribute

Атрибут присваивается формам клиентов

customer_form_attribute

И последнее, самое важное, так или иначе, люди просто пропускают его и задаются вопросом, почему атрибут customer не хочет сохранять из бэкэнда: пожалуйста, убедитесь, что для флага is_system в таблице customer_eav_attribute установлено значение 0, иначе атрибут не будут сохранены.

Это можно сделать, установив параметр атрибута «system» => 0 в параметрах атрибута внутри скрипта установки / обновления.

Не забудьте очистить кэш в конце концов!

прямая ссылка на решение

A.Maksymiuk
источник
я могу сохранить атрибут с помощью is_system = 0, но вы можете дать мне знать, почему нам нужно сделать его 0? как его 1 по умолчанию в таблице
bhargav shastri
1
@bhargav shastri, потому что атрибут is_system принадлежит Magento
user2804
да, я получил это спасибо
bhargav shastri
0

Ответ А.Максымюка сработал как шарм. Вот сценарии 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;

Ура,

Ренато

медина
источник