El atributo de cliente personalizado migrado de Magento2 no está guardando el valor

Aug 21 2020

He migrado los datos de Magento de la versión 1.9.0.1 a la versión 2.3.5-p1. En la configuración 1.9.0.1, se creó un atributo de cliente personalizado llamado mobile_no. Los datos y el atributo se crean automáticamente en mi configuración de M2. Los datos de mobile_no también son visibles en el administrador de M2. Pero cuando trato de editar el número y guardarlo, guarda el valor anterior y no toma el actualizado. Puede alguien ayudarme con esto? Tengo que llamar a este atributo en el formulario de registro de la interfaz.

Respuestas

2 PratsMagento Aug 27 2020 at 08:04

Después de verificar varias cosas y buscar en la base de datos, finalmente encontré el problema, por lo que compartí la respuesta. El problema era que después de la migración faltaba la entrada en la eav_entity_attributetabla para el atributo respectivo. Se actualizó el atributo usando el parche de datos a continuación y se solucionó el problema. Ahora puedo guardar el valor.

<?php declare(strict_types=1);

/**
 * Patch for the Customer Attribute
 *
 * Patch Class to update the migrated field mobile_no in the `eav_entity_attribute` table. 
 */

namespace VendorName\ModuleName\Setup\Patch\Data;

use Zend_Validate_Exception;
use Magento\Eav\Model\Config;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Eav\Model\Entity\Attribute\Source\Boolean;
use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;

/**
 * Patch Class to update the mobile_no in the `eav_entity_attribute` table.
 */
class UpdateEavMobileNoAttribute implements DataPatchInterface
{
    /**
     * @var Config
     */
    private $eavConfig; /** * @var EavSetupFactory */ private $eavSetupFactory;

    /**
     * @var AttributeSetFactory
     */
    private $attributeSetFactory; /** * AddressAttribute constructor. * * @param Config $eavConfig
     * @param EavSetupFactory     $eavSetupFactory * @param AttributeSetFactory $attributeSetFactory
     */
    public function __construct(
        Config $eavConfig, EavSetupFactory $eavSetupFactory,
        AttributeSetFactory $attributeSetFactory ) { $this->eavConfig = $eavConfig; $this->eavSetupFactory = $eavSetupFactory; $this->attributeSetFactory = $attributeSetFactory; } /** * {@inheritdoc} */ public static function getDependencies(): array { return []; } /** * Create strategic account customer attribute * @return void * @throws LocalizedException * @throws Zend_Validate_Exception */ public function apply(): void { $eavSetup = $this->eavSetupFactory->create(); $customerEntity = $this->eavConfig->getEntityType('customer'); $attributeSetId = $customerEntity->getDefaultAttributeSetId(); $attributeSet = $this->attributeSetFactory->create(); $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        $customAttribute = $this->eavConfig->getAttribute('customer', 'mobile_no');

        $customAttribute->addData([ 'attribute_set_id' => $attributeSetId,
            'attribute_group_id' => $attributeGroupId, 'used_in_forms' => ['adminhtml_customer', 'customer_account_edit'] ]); $customAttribute->save();

    }

    /**
     * {@inheritdoc}
     */
    public function getAliases(): array
    {
        return [];
    }
}