Wartości niestandardowego atrybutu klienta Magento 2 nie są zapisywane w bazie danych?

11

Dodałem dwa niestandardowe atrybuty strony rejestracji klienta (alternatywny adres e-mail i alternatywny numer) w nowym module (poprzez: app / code /.../ Setup / InstallData.php).

„Widok” zaprojektowałem w niestandardowym motywie (przesłaniając register.phtml). Teraz mogę zobaczyć nowe pola na stronie rejestracji. Jednak dane w nowych polach (alternatywny adres e-mail i numer) nie są zapisywane w bazie danych.

„customer_entity_int” zapisuje wartość „0” .. „customer_entity_varchar” nic nie zapisuje ..

wprowadź opis zdjęcia tutaj

Tutaj na ekranie można zobaczyć, że wartość jest zapisana jako „0”. Atrybut_id 132 dotyczy „alternatywnego numeru kontaktowego” na stronie rejestracji. Oczekuję więc, że wartość będzie zawierać dane, które wprowadzam na stronie rejestracji interfejsu użytkownika.

Co ja robię źle ?

Kartik
źródło
Czy dodałeś atrybuty klienta przy użyciu niestandardowego rozszerzenia?
Kishan Patadia,
Dodałem go za pomocą niestandardowego modułu (app / code /.../ Setup / InstallData.php) i sprawiłem, że „przegląda” za pomocą dostosowanego nowego motywu, zastępując plik „phtml”.
Kartik
Przed zapisaniem danych .. wydrukuj model i sprawdź, czy wartości tam są.
Kingshuk Deb
Czy reindeksowałeś i wyczyściłeś pamięć podręczną?
Kishan Patadia,
Jeśli po wydrukowaniu nadal wyświetla prawidłowe wartości, spróbuj zarejestrować zapytanie i sprawdź, w jaki sposób generowane jest zapytanie, i sprawdź, czy w tym zapytaniu znajdują się twoje wartości. Aby to zrobić, otwórz aplikację / etc / di.xml ... wyszukaj Quiet, Znajdziesz tylko 1 wystąpienie i zmień je na File. Teraz otwórz plik Magento\Framework\DB\Logger\Filei ustaw wartość $logAllQueriestrue. i odśwież przeglądarkę i otwórz wygenerowany plik var/debug/db.log. Znajdź zapytanie i sprawdź zapytanie.
Kingshuk Deb

Odpowiedzi:

20

Prawdopodobnie rozwiązałeś problem, ale dla osób, które przychodzą tutaj z Google jako ja, istnieje rozwiązanie:

Tworząc atrybut klienta, zwróć uwagę na następujące rzeczy:

Atrybut jest dodawany do zestawu atrybutów, grupy

customer_eav_attribute
eav_entity_attribute

Atrybut jest przypisany do formularzy klientów

customer_form_attribute

I ostatnia najważniejsza, ponieważ jakoś ludzie ją pomijają i zastanawiają się, dlaczego atrybut klienta nie chce zapisywać z backendu: Upewnij się, że ustawiłeś flagę „is_system” w tabeli „customer_eav_attribute” na 0, w przeciwnym razie atrybut nie zostaną zapisane.

Można tego dokonać, ustawiając opcję atrybutu na „system” => 0 w parametrach atrybutu w skrypcie instalacyjnym / aktualizacyjnym.

W końcu nie zapomnij opróżnić pamięci podręcznej!

bezpośredni link do rozwiązania

A.Maksymiuk
źródło
mogę zapisać atrybut przez is_system = 0, ale czy możesz dać mi znać, dlaczego musimy ustawić go na 0? jako 1 domyślnie w tabeli
bhargav shastri
1
@bhargav shastri, ponieważ atrybut is_system należy do Magento
user2804
tak,
rozumiem
0

Odpowiedź A.Maksymiuka działała jak urok. Oto skrypty SQL (MySQL / Maria DB), które utworzyłem w celu rozwiązania problemu z moim atrybutem:

# 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;

Twoje zdrowie,

Renato

medyna
źródło