Magento 2 วิธีการถอนการติดตั้งคุณลักษณะที่เพิ่มโดยโมดูลที่กำหนดเอง?


11

จนถึงขณะนี้ผมรู้ว่าเมื่อถอนการติดตั้งโมดูลที่กำหนดเองมันเป็นไปได้ที่จะลบตารางที่กำหนดเองหรือคอลัมน์ที่เพิ่มขึ้นโดยโมดูลที่กำหนดเองโดยใช้ซึ่งทอดตัวuninstall.php \Magento\Framework\Setup\UninstallInterfaceแต่จะลบแอตทริบิวต์ที่กำหนดเองที่เพิ่มโดยInstallData.phpเมื่อถอนการติดตั้งโมดูลได้อย่างไร ขอบคุณล่วงหน้า!


ทำตามวิธีนี้: magento.stackexchange.com/questions/78221/…
Abdul

@Abdul ฉันได้อ่านโพสต์นั้นแล้ว แต่ไม่ได้กล่าวถึงวิธีการลบแอตทริบิวต์
Ricky.C

คุณหมายถึงค่าในตารางเฉพาะหรือไม่?
Maddy

คำตอบ:


13

ในโมดูลคุณจะใช้รหัสต่อไปนี้ที่ใช้การฉีดอ้างอิงสำหรับการถอนการติดตั้ง มันทำงานได้ดีเท่าเทียมกันทุกที่อื่นเพียงแค่ให้แน่ใจว่าได้ฉีด EavSetupFactory ลงในตัวสร้างแล้วใช้วิธีการของมันในการทำงาน

<?php

namespace Company\Modulename\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; // Find these in the eav_entity_type table
            $eavSetup->removeAttribute($entityTypeId, 'attribute_code');

            $setup->endSetup();

        }
    }

}

นอกจากนี้การใช้วิธีนี้จะทำให้แอตทริบิวต์ eav ลบตัวเองออกจากตารางทั้งหมดอย่างถูกต้องเนื่องจากมีการเชื่อมโยงโดยใช้ข้อ จำกัด

BTW ฉันแนะนำให้ใช้ PHPStorm + xdebug คุณจะได้เรียนรู้มากมายเกี่ยวกับสิ่งต่าง ๆ เหล่านี้เชื่อมต่อกัน


ไฟล์อะไรและมันจะไปที่ไหน
ทำเครื่องหมาย

มัน Uninstall.php มันไปในโฟลเดอร์การตั้งค่าโมดูล ตรวจสอบเนมสเปซ ควรตรงกับชื่อพา ธ เสมอ
CarComp

1
นอกจากนี้คุณยังสามารถใช้Customer::ENTITYหรือProduct::ENTITYอื่น ๆ แทนหรือ1 4( use Magento\Catalog\Model\Product; use Magento\Customer\Model\Customer;)
Jānis Elmeris

2

คุณสามารถใช้\Magento\Eav\Api\AttributeRepositoryInterface::deleteสิ่งนี้


True แต่โดยนัยก็คือเขากำลังสร้างโมดูลที่กำหนดเองดังนั้นนั่นหมายความว่าการสมมติวิธีการสร้างและการลบนั้นเป็นแบบโปรแกรม การใช้ api นั้นเป็นวิธีการที่ไม่ถูกต้องอย่างไรก็ตามคุณสามารถย้อนกลับไปในแบบของคุณจาก AttributeRepositoryInterface ไปยังคลาสและวิธีการที่ใช้งานได้จริง
CarComp

1
@CarComp การใช้ API เป็นวิธีการที่เหมาะสมเพียงวิธีเดียวหากคุณสนใจที่จะทำงานโมดูลของคุณใน Magento เวอร์ชันใหม่ Magento ใช้นโยบาย BC สำหรับ API เท่านั้น และการใช้งานส่วนตัวสามารถเปลี่ยนแปลงได้ตลอดเวลาโดยไม่ต้องแจ้งให้ทราบ
KAndy

ฉันแค่อ่านสิ่งที่ฉันเขียนใหม่ ฉันไม่ได้บอกว่ามันเป็นวิธีที่ผิดสำหรับทุกคนฉันหมายถึงเพียงเกี่ยวกับคำถามของเขา เขาถามว่าจะทำอย่างไรใน PHP
CarComp

1
API - เชื่อมต่อกับคำอธิบายประกอบ @api ไม่ใช่ Web API ขออภัยถ้าฉันพลาดการเรียน
KAndy

1

ใช้ Magento \ Customer \ Model \ Customer แทนรหัสเอนทิตีเช่น 1 และ 2

<?php
namespace Custom\Module\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\Customer\Model\Customer;

class InstallData implements InstallDataInterface
{
private $eavSetupFactory;

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

 public function install(ModuleDataSetupInterface $setup, ModuleContextInterface 
  $context)
   {
    $setup->startSetup();

   $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
   $eavSetup->removeAttribute(Customer::ENTITY, 'attribute_code_here');

  $setup->endSetup();
  }
}

การเข้ารหัสที่มีความสุข !!


ขอบคุณพี่ทางออกของคุณแก้ปัญหาของฉัน!
Faisal Sheikh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.