Os valores do atributo do cliente personalizado do Magento 2 não são salvos no banco de dados?

11

Adicionei dois atributos personalizados para a página de registro do cliente (email alternativo e número alternativo) em um novo módulo (por meio de: app / code /.../ Setup / InstallData.php).

Eu projetei sua 'visualização' dentro de um tema personalizado (substituindo register.phtml). Agora posso ver novos campos na página de registro. No entanto, os dados dentro de novos campos (email e número alternativos) não estão sendo salvos no banco de dados.

'customer_entity_int' salva o valor '0'. 'customer_entity_varchar' não salva nada.

insira a descrição da imagem aqui

Aqui na tela você pode ver o valor é salvo como '0'. O attribute_id 132 é para 'Número de contato alternativo' na página de registro. Então, espero que o valor mantenha os dados que estou inserindo na página de registro do front-end.

O que estou fazendo errado ?

Kartik
fonte
Você adicionou atributos do cliente usando extensão personalizada?
Kishan Patadia 6/04
Eu adicionei-lo através de um módulo personalizado (app / code /.../ Setup / InstallData.php) e fez de 'ver' através de um novo tema personalizado, substituindo o arquivo 'phtml' ..
Kartik
Antes de salvar os dados .. imprima o modelo e verifique se seus valores estão lá.
precisa saber é o seguinte
Você reindexou e limpou o cache?
Kishan Patadia
Se ele ainda mostrar valores adequados após a impressão do modelo, tente registrar a consulta e verifique como a consulta está sendo gerada e veja se seus valores estão nessa consulta. Para fazer isso, abra o aplicativo / etc / di.xml ... procure Quiet, você encontrará apenas 1 ocorrência e mude para File. Agora abra o arquivo Magento\Framework\DB\Logger\Filee defina $logAllQueriescomo true. e atualize o navegador e abra o arquivo gerado var/debug/db.log. Encontre sua consulta e verifique-a.
precisa saber é o seguinte

Respostas:

20

Você provavelmente resolveu seu problema, mas para as pessoas que vêm aqui do google como eu, há uma solução:

Ao criar o atributo do cliente, tome cuidado com as seguintes coisas:

O atributo é adicionado ao conjunto de atributos, grupo

customer_eav_attribute
eav_entity_attribute

O atributo é atribuído aos formulários do cliente

customer_form_attribute

E o último, o mais importante, de alguma forma, as pessoas simplesmente ignoram e se perguntam por que o atributo do cliente não deseja salvar do back-end: certifique-se de definir o sinalizador "is_system" na tabela "customer_eav_attribute" como 0, caso contrário, o atributo não será salvo.

Isso pode ser feito configurando a opção de atributo como "sistema" => 0 nos parâmetros de atributo dentro do script de instalação / atualização.

Não se esqueça de liberar o cache, afinal!

link direto para a solução

A.Maksymiuk
fonte
Posso salvar o atributo por is_system = 0, mas você pode me informar por que precisamos torná-lo 0? como 1 por padrão na tabela
Bhargav shastri
1
@bhargav shastri, porque atributo is_system pertence a Magento
user2804
sim eu consegui graças
Bhargav shastri
0

A resposta de A.Maksymiuk funcionou como um encanto. Aqui os scripts SQL (MySQL / Maria DB) que criei para corrigir o problema com o meu atributo:

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

Felicidades,

Renato

medina
fonte