I valori dell'attributo cliente personalizzato Magento 2 non vengono salvati nel database?


11

Ho aggiunto due attributi personalizzati per la pagina di registrazione del cliente (e-mail alternativa e numero alternativo) in un nuovo modulo (tramite: app / code /.../ Setup / InstallData.php).

Ho progettato la sua "vista" all'interno di un tema personalizzato (sovrascrivendo register.phtml). Ora posso vedere nuovi campi nella pagina di registrazione. Tuttavia, i dati all'interno di nuovi campi (e-mail e numero alternativi) non vengono salvati nel database.

'customer_entity_int' salva '0' valore .. 'customer_entity_varchar' non salva nulla ..

inserisci qui la descrizione dell'immagine

Qui nella schermata puoi vedere il valore salvato come '0'. Attributo_id 132 è per "Numero di contatto alternativo" nella pagina di registrazione. Quindi mi aspetto che il valore contenga i dati che sto inserendo nella pagina di registrazione del frontend.

Che cosa sto facendo di sbagliato ?


Hai aggiunto gli attributi del cliente utilizzando l'estensione personalizzata?
Kishan Patadia,

L'ho aggiunto tramite un modulo personalizzato (app / code /.../ Setup / InstallData.php) e l'ho fatto 'visualizzare' attraverso un nuovo tema personalizzato sovrascrivendo il file 'phtml'.
Kartik,

Prima di salvare i dati .. stampa il modello e controlla se ci sono i tuoi valori.
Kingshuk Deb

Hai reindicizzato e svuotato la cache?
Kishan Patadia,

Se mostra ancora i valori corretti dopo aver stampato il modello, prova a registrare la query e controlla come viene generata la query e verifica se i tuoi valori sono presenti in quella query. Per farlo, apri l'app / etc / di.xml ... cerca Quiet, troverai solo 1 occorrenza e modificala in File. Ora apri il file Magento\Framework\DB\Logger\Filee imposta $logAllQueriessu true. e aggiorna il browser e apri il file generato var/debug/db.log. Trova la tua query e controlla la query.
Kingshuk Deb

Risposte:


20

Probabilmente hai risolto il tuo problema, ma per le persone che vengono qui da Google come me, c'è una soluzione:

Quando si crea l'attributo del cliente, prestare attenzione alle seguenti cose:

L'attributo viene aggiunto al set di attributi, gruppo

customer_eav_attribute
eav_entity_attribute

L'attributo è assegnato ai moduli cliente

customer_form_attribute

E l'ultimo è il più importante in qualche modo, la gente lo salta e si chiede perché l'attributo del cliente non vuole salvare dal backend: assicurati di impostare il flag "is_system" nella tabella "customer_eav_attribute" su 0, altrimenti l'attributo non verrà salvato.

Può essere fatto impostando l'opzione dell'attributo su "system" => 0 nei parametri dell'attributo all'interno dello script di installazione / aggiornamento.

Non dimenticare di svuotare la cache dopo tutto!

collegamento diretto alla soluzione


posso salvare l'attributo di is_system = 0, ma puoi farmi sapere perché dobbiamo renderlo 0? come impostazione predefinita 1 nella tabella
bhargav shastri

1
@bhargav shastri, perché l'attributo is_system appartiene a Magento
user2804

si ho capito grazie
bhargav shastri

0

La risposta di A.Maksymiuk ha funzionato come un incantesimo. Ecco gli script SQL (MySQL / Maria DB) che ho creato per risolvere il problema con il mio attributo:

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

Saluti,

Renato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.