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


11

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

Я створив його "перегляд" у спеціальній темі (шляхом переосмислення register.phtml). Тепер я можу побачити нові поля на сторінці реєстрації. Однак дані в нових полях (альтернативна електронна пошта та номер) не зберігаються всередині бази даних.

'customer_entity_int' зберігає значення '0' .. 'customer_entity_varchar' нічого не зберігає ..

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

Тут на екрані ви бачите, що значення зберігається як "0". Атрибут_id 132 призначений для "Альтернативний контактний номер" на сторінці реєстрації. Тож я очікую, що цінність містить дані, які я ввожу на сторінці реєстрації за кордоном.

Що я роблю неправильно?


Ви додали атрибути клієнта за допомогою спеціального розширення?
Кішан Патадія

Я додав його через спеціальний модуль (додаток / код /.../ Setup / InstallData.php) і зробив це "перегляд" за допомогою спеціально налаштованої нової теми, змінивши файл "phtml".
Kartik

Перш ніж зберегти дані .. роздрукуйте модель і перевірте, чи є ваші значення.
Кінгшук Деб

Ви перевстановили та очистили кеш?
Kishan Patadia

Якщо після надрукування моделі все ще відображаються належні значення, спробуйте записати запит і перевірити, як запит генерується, і перевірте, чи є ваші значення в цьому запиті. Щоб відкрити додаток / etc / di.xml ... для пошуку Quiet, ви знайдете лише 1 випадок і змініть це на File. Тепер відкрийте файл Magento\Framework\DB\Logger\Fileі встановіть $logAllQueriesзначення true. та оновіть браузер та відкрийте створений файл var/debug/db.log. Знайдіть свій запит і перевірте.
Кінгшук Деб

Відповіді:


20

Ви, ймовірно, вирішили свою проблему, але для людей, які приїжджають сюди з Google, як я, є рішення:

Створюючи атрибут клієнта, будь ласка, подбайте про наступні речі:

Атрибут додається до набору атрибутів, групи

customer_eav_attribute
eav_entity_attribute

Атрибут присвоюється формам клієнта

customer_form_attribute

І останнє, найважливіше - як-небудь, люди просто пропускають його і цікавляться, чому атрибут клієнта не хоче врятувати від бекенда: будь ласка, переконайтеся, що встановіть прапор "is_system" у таблиці "customer_eav_attribute" на 0, інакше атрибут не збережеться

Це можна зробити, встановивши параметр атрибута "system" => 0 у параметрах атрибутів всередині сценарію встановлення / оновлення.

Не забудьте промити кеш!

пряме посилання на рішення


я можу зберегти атрибут за 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;

Ура,

Ренато

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.