¿Los valores del atributo personalizado del cliente Magento 2 no se guardan en la base de datos?

11

Agregué dos atributos personalizados para la página de registro del cliente (correo electrónico alternativo y número alternativo) en un nuevo módulo (a través de: app / code /.../ Setup / InstallData.php).

He diseñado su 'vista' dentro de un tema personalizado (anulando register.phtml). Ahora puedo ver nuevos campos en la página de registro. Sin embargo, los datos dentro de los nuevos campos (correo electrónico y número alternativos) no se guardan dentro de la base de datos.

'customer_entity_int' guarda el valor '0' ... 'customer_entity_varchar' no guarda nada ...

ingrese la descripción de la imagen aquí

Aquí en la pantalla puede ver que el valor se guarda como '0'. El atributo_id 132 es para 'Número de contacto alternativo' en la página de registro. Así que espero que el valor contenga los datos que estoy ingresando en la página de registro de la interfaz.

Qué estoy haciendo mal ?

Kartik
fuente
¿Agregaste atributos de cliente usando una extensión personalizada?
Kishan Patadia
He añadido a través de un módulo personalizado (app / código /.../ Configuración / InstallData.php) y lo hice de 'ver' a través de un nuevo tema personalizado reemplazando el archivo 'phtml' ..
Kartik
Antes de guardar los datos ... imprima el modelo y verifique si sus valores están allí.
Kingshuk Deb
¿Reindexaste y borraste el caché?
Kishan Patadia
Si todavía muestra los valores adecuados después de imprimir el modelo, intente registrar la consulta y verifique cómo se genera la consulta y vea si sus valores están allí en esa consulta. Para hacerlo abierto a la aplicación / etc / di.xml ... busque Quiet, encontrará solo 1 aparición y cambiará eso a File. Ahora abra el archivo Magento\Framework\DB\Logger\Filey configúrelo $logAllQueriescomo verdadero. y actualice el navegador y abra el archivo generado var/debug/db.log. Encuentre su consulta y verifique la consulta.
Kingshuk Deb

Respuestas:

20

Probablemente haya resuelto su problema, pero para las personas que vienen de Google como yo, hay una solución:

Al crear el atributo del cliente, tenga cuidado con lo siguiente:

El atributo se agrega al conjunto de atributos, grupo

customer_eav_attribute
eav_entity_attribute

El atributo se asigna a los formularios del cliente.

customer_form_attribute

Y el último el más importante ya que de alguna manera, las personas simplemente lo omiten y se preguntan por qué el atributo del cliente no quiere guardar desde el backend: asegúrese de establecer el indicador "is_system" en la tabla "customer_eav_attribute" a 0, de lo contrario, el atributo No se guardará.

Se puede hacer estableciendo la opción de atributo en "sistema" => 0 en los parámetros de atributo dentro del script de instalación / actualización.

¡No olvides vaciar tu caché después de todo!

enlace directo a la solución

A.Maksymiuk
fuente
puedo guardar el atributo por is_system = 0, pero ¿puedes decirme por qué necesitamos hacerlo 0? como su 1 por defecto en la tabla
bhargav shastri
1
@bhargav shastri, porque el atributo is_system pertenece a Magento
user2804
sí, lo tengo gracias
bhargav shastri
0

La respuesta de A.Maksymiuk funcionó a las mil maravillas. Aquí los scripts SQL (MySQL / Maria DB) que he creado para solucionar el problema con mi 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;

Salud,

Renato

medina
fuente