Die Werte des benutzerdefinierten Kundenattributs von Magento 2 werden nicht in der Datenbank gespeichert?

11

Ich habe zwei benutzerdefinierte Attribute für die Kundenregistrierungsseite (alternative E-Mail-Adresse und alternative Nummer) in einem neuen Modul hinzugefügt (über: app / code /.../ Setup / InstallData.php).

Ich habe seine 'Ansicht' in einem benutzerdefinierten Thema entworfen (indem ich register.phtml überschreibe). Ich kann jetzt neue Felder auf der Registrierungsseite sehen. Die Daten in neuen Feldern (alternative E-Mail-Adresse und Nummer) werden jedoch nicht in der Datenbank gespeichert.

'customer_entity_int' speichert den Wert '0'. 'customer_entity_varchar' speichert nichts.

Geben Sie hier die Bildbeschreibung ein

Hier auf dem Bildschirm sehen Sie, dass der Wert als '0' gespeichert ist. Die attribute_id 132 steht für 'Alternative Kontaktnummer' auf der Registrierungsseite. Ich erwarte daher, dass der Wert die Daten enthält, die ich auf der Frontend-Registrierungsseite eingebe.

Was mache ich falsch ?

Kartik
quelle
Haben Sie Kundenattribute mit einer benutzerdefinierten Erweiterung hinzugefügt?
Kishan Patadia
Ich habe es über ein benutzerdefiniertes Modul (app / code /.../ Setup / InstallData.php) hinzugefügt und es durch ein benutzerdefiniertes neues Thema "angezeigt", indem ich die "phtml" -Datei überschrieben habe.
Kartik
Bevor Sie die Daten speichern, drucken Sie das Modell aus und prüfen Sie, ob Ihre Werte vorhanden sind.
Kingshuk Deb
Haben Sie den Cache neu indiziert und geleert?
Kishan Patadia
Wenn nach dem Drucken des Modells immer noch die richtigen Werte angezeigt werden, versuchen Sie, die Abfrage zu protokollieren und zu überprüfen, wie die Abfrage generiert wird, und festzustellen, ob Ihre Werte in dieser Abfrage enthalten sind. Öffnen Sie dazu die App / etc / di.xml ... und suchen Sie nach Quiet. Sie finden nur 1 Vorkommen und ändern dies in File. Öffnen Sie nun die Datei Magento\Framework\DB\Logger\Fileund setzen Sie sie $logAllQueriesauf true. und aktualisieren Sie den Browser und öffnen Sie die generierte Datei var/debug/db.log. Suchen Sie Ihre Abfrage und überprüfen Sie die Abfrage.
Kingshuk Deb

Antworten:

20

Sie haben Ihr Problem wahrscheinlich gelöst, aber für Leute, die wie ich von Google hierher kommen, gibt es eine Lösung:

Beachten Sie beim Erstellen des Kundenattributs Folgendes:

Das Attribut wird dem Attributsatz Gruppe hinzugefügt

customer_eav_attribute
eav_entity_attribute

Das Attribut wird Kundenformularen zugewiesen

customer_form_attribute

Und das letzte ist das Wichtigste, da die Leute es einfach überspringen und sich fragen, warum das Kundenattribut nicht aus dem Backend gespeichert werden soll : Stellen Sie sicher, dass das Flag "is_system" in der Tabelle "customer_eav_attribute" auf 0 gesetzt ist, andernfalls auf das Attribut wird nicht gespeichert.

Dies kann erreicht werden, indem die Attributoption in den Attributparametern im Installations- / Upgrade-Skript auf "system" => 0 gesetzt wird.

Vergessen Sie doch nicht, Ihren Cache zu leeren!

direkter Link zur Lösung

A. Maksymiuk
quelle
Ich kann das Attribut mit is_system = 0 speichern, aber können Sie mich wissen lassen, warum wir es auf 0 setzen müssen? als seine 1 standardmäßig in Tabelle
Bhargav Shastri
1
@bhargav shastri, weil das Attribut is_system zu Magento gehört
user2804
Ja, ich habe es bekommen, danke
Bhargav Shastri
0

A.Maksymiuks Antwort wirkte wie ein Zauber. Hier die SQL-Skripte (MySQL / Maria DB), die ich erstellt habe, um das Problem mit meinem Attribut zu beheben:

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

Prost,

Renato

Medina
quelle