Les valeurs d'attribut client personnalisé de Magento 2 ne sont pas enregistrées dans la base de données?


11

J'ai ajouté deux attributs personnalisés pour la page d'inscription du client (adresse e-mail alternative et numéro alternatif) dans un nouveau module (via: app / code /.../ Setup / InstallData.php).

J'ai conçu sa «vue» à l'intérieur d'un thème personnalisé (en redéfinissant register.phtml). Je peux maintenant voir de nouveaux champs sur la page d'inscription. Cependant, les données contenues dans les nouveaux champs (adresse e-mail et numéro alternatifs) ne sont pas enregistrées dans la base de données.

'customer_entity_int' enregistre la valeur '0' .. 'customer_entity_varchar' ne sauvegarde rien ..

entrez la description de l'image ici

Ici, à l'écran, vous pouvez voir que la valeur est enregistrée en tant que «0». L'attribut_id 132 est pour «Numéro de contact alternatif» sur la page d'enregistrement. Je m'attends donc à ce que la valeur contienne les données que j'entre sur la page d'enregistrement frontend.

Qu'est-ce que je fais mal ?


Avez-vous ajouté des attributs client à l'aide d'une extension personnalisée?
Kishan Patadia du

Je l'ai ajouté via un module personnalisé (app / code /.../ Setup / InstallData.php) et je l'ai fait "voir" à travers un nouveau thème personnalisé en remplaçant le fichier "phtml".
Kartik

Avant d'enregistrer les données .. imprimez le modèle et vérifiez si vos valeurs sont là.
Kingshuk Deb

Avez-vous réindexé et vidé le cache?
Kishan Patadia du

Si ses valeurs s'affichent toujours après l'impression du modèle, essayez de consigner la requête et vérifiez comment la requête est générée et voyez si vos valeurs sont présentes dans cette requête. Pour ce faire, ouvrez l'application / etc / di.xml ... recherchez Quiet, Vous ne trouverez qu'une seule occurrence et remplacez-la par File. Ouvrez maintenant le fichier Magento\Framework\DB\Logger\Fileet définissez-le $logAllQueriessur true. et actualisez le navigateur et ouvrez le fichier généré var/debug/db.log. Recherchez votre requête et vérifiez-la.
Kingshuk Deb

Réponses:


20

Vous avez probablement résolu votre problème, mais pour les personnes qui viennent de Google comme moi, il existe une solution:

Lors de la création de l'attribut client, veuillez prendre soin des choses suivantes:

L'attribut est ajouté à l'ensemble d'attributs, groupe

customer_eav_attribute
eav_entity_attribute

L'attribut est affecté aux formulaires client

customer_form_attribute

Et le dernier est le plus important car d'une manière ou d'une autre, les gens sautent dessus et se demandent pourquoi l'attribut client ne veut pas enregistrer du backend: veuillez vous assurer de mettre l'indicateur "is_system" dans la table "customer_eav_attribute" à 0, sinon l'attribut ne sera pas enregistré.

Cela peut être fait en définissant l'option d'attribut sur "système" => 0 dans les paramètres d'attribut dans le script d'installation / mise à niveau.

N'oubliez pas de vider votre cache après tout!

lien direct vers la solution


je peux enregistrer l'attribut par is_system = 0, mais pouvez-vous me faire savoir pourquoi nous devons le mettre à 0? comme son 1 par défaut dans le tableau
bhargav shastri

1
@bhargav shastri, car l'attribut is_system appartient à Magento
user2804

oui je l'ai eu merci
bhargav shastri

0

La réponse de A.Maksymiuk a fonctionné comme un charme. Voici les scripts SQL (MySQL / Maria DB) que j'ai créés afin de résoudre le problème avec mon attribut:

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

À votre santé,

Renato

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.