Wie können wir das benutzerdefinierte Attribut (für den Kunden erstellt) in Magento 2 entfernen / löschen?

7

Ich möchte das benutzerdefinierte Attribut entfernen, das mit installchema für den Kunden erstellt wurde. Ich bin diesem Link gefolgt , aber es hat nicht geholfen. Jemand hat es früher versucht, bitte helfen Sie. Vielen Dank im Voraus!
Ich habe das Attribut manuell mithilfe des Installationsschemaskripts hinzugefügt und der Code ist hier

namespace Bibhu\Customattribute\Setup;
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Model\Config;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory, Config $eavConfig)
    {
        $this->eavSetupFactory = $eavSetupFactory;
        $this->eavConfig = $eavConfig;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->addAttribute(
            \Magento\Customer\Model\Customer::ENTITY,
            'sample_attribute',
            [
                'type' => 'int',
                'label' => 'Sample Attribute',
                'input' => 'select',
                'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                'required' => true,
                'default' => '0',
                'sort_order' => 100,
                'system' => false,
                'position' => 100
            ]
        );
        $sampleAttribute = $this->eavConfig->getAttribute(\Magento\Customer\Model\Customer::ENTITY, 'sample_attribute');
        $sampleAttribute->setData(
            'used_in_forms',
            ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address']
        );
        $sampleAttribute->save();

            }
}

und mit diesem Skript Uninstall.php zu entfernen

    <?php
namespace Bibhu\Customattribute\Setup ;

    class Uninstall implements \Magento\Framework\Setup\UninstallInterface
    {
        protected $eavSetupFactory;
        public function __construct(\Magento\Eav\Setup\EavSetupFactory $eavSetupFactory)
        {
            $this->eavSetupFactory = $eavSetupFactory;
        }
        public function uninstall(\Magento\Framework\Setup\SchemaSetupInterface $setup, \Magento\Framework\Setup\ModuleContextInterface $context)
        {
            $setup->startSetup();
            $eavSetup = $this->eavSetupFactory->create();
            $entityTypeId = 1; 
            $eavSetup->removeAttribute($entityTypeId, 'sample_attribute');
            $setup->endSetup();
        }
    }
Bibhu Asish
quelle

Antworten:

7

Sie sollten jetzt UpgradeData verwenden.

Erstellen Sie diese Datei app / code / Bibhu / Customattribute / Setup / UpgradeData.php :

namespace Bibhu\Customattribute\Setup;

use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;

/**
 * Class UpgradeData
 * @package Bibhu\Customattribute\Setup
 */
class UpgradeData implements UpgradeDataInterface
{
    /**
     * @var EavSetupFactory
     */
    private $eavSetupFactory;

    /**
     * UpgradeData constructor.
     * @param EavSetupFactory $eavSetupFactory
     */
    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    /**
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     */
    public function upgrade(
        ModuleDataSetupInterface $setup,
        ModuleContextInterface $context
    ) {
        $setup->startSetup();

        if (version_compare($context->getVersion(), '2.0.1') < 0) {
            $this->upgradeSchema201($setup);
        }

        $setup->endSetup();
    }

    /**
     * @param ModuleDataSetupInterface $setup
     */
    private function upgradeSchema201(ModuleDataSetupInterface $setup)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

        $eavSetup->removeAttribute(
            \Magento\Customer\Model\Customer::ENTITY,
            'sample_attribute'
        );
    }
}

... ändern Sie Ihre Modulversion (stellen Sie sicher, dass Sie sie erhöhen) in app / code / Bibhu / Customattribute / etc / module.xml :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Bibhu_Customattribute" setup_version="2.0.1"></module>
</config>

... dann aktualisieren Sie Ihr Modul über die Befehlszeile:

php bin/magento setup:upgrade
Antoine Martin
quelle
2

Okay, es ist möglicherweise nicht der richtige Weg, aber ich kann das Attribut löschen, indem ich die bestimmte Attributzeile aus der Tabelle eav_attribute aus meiner Datenbank entferne.

Bibhu Asish
quelle
0

Versuchen Sie es mit dem folgenden Skript

$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
 $eavSetup->removeAttribute(\Magento\Customer\Model\Customer::ENTITY, 'custom-attribute-code');
Ramesh
quelle
1
Ich habe es versucht, aber es funktioniert nicht
Bibhu Asish
0

Ich verwende das Kunden-Setup, um benutzerdefinierte Kundenattribute in meinem Controller zu löschen. Nachdem ich das benutzerdefinierte Kundenattribut gelöscht habe, bereinige ich den Cache programmgesteuert. Der gesamte Code sieht folgendermaßen aus:

use Magento\Customer\Setup\CustomerSetupFactory; 

class Delete  extends \Magento\Backend\App\Action
{
    public function __construct(
        CustomerSetupFactory $customerSetupFactory, ,
        \Magento\Backend\App\Action\Context $context,
        \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool,
        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
    ) {
        $this->customerSetupFactory =$customerSetupFactory; 
        $this->_cacheFrontendPool = $cacheFrontendPool;
        $this->_cacheTypeList = $cacheTypeList;
        parent::__construct($context);
    }

    public function execute()
    {
     $this->attribute_code = 'custom_attribute_code';
     $this->removeEavCustomer();
    }

    private function removeEavCustomer(){
      $customerSetup = $this->customerSetupFactory->create();
      $customerSetup->removeAttribute(\Magento\Customer\Model\Customer::ENTITY, $this->attribute_code);

      $this->cleanCache();
    }

    private function cleanCache(){
      $types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
      foreach ($types as $type) {
          $this->_cacheTypeList->cleanType($type);
      }
      foreach ($this->_cacheFrontendPool as $cacheFrontend) {
          $cacheFrontend->getBackend()->clean();
      }
    }

}
Idham Choudry
quelle