Magento 2 Làm cách nào để gỡ cài đặt các thuộc tính được thêm bởi mô-đun tùy chỉnh?


11

Cho đến nay tôi biết rằng khi gỡ cài đặt một mô-đun tùy chỉnh, có thể loại bỏ các bảng hoặc cột tùy chỉnh được thêm bởi mô-đun tùy chỉnh bằng cách sử dụng uninstall.phpphần mở rộng \Magento\Framework\Setup\UninstallInterface. Nhưng làm thế nào để loại bỏ các thuộc tính tùy chỉnh được thêm vào InstallData.phpkhi gỡ cài đặt mô-đun? Cảm ơn trước!



@Abdul Tôi đã đọc bài viết đó trước đây. Nhưng nó không đề cập đến phương pháp để loại bỏ các thuộc tính.
Ricky.C

Bạn có nghĩa là các giá trị trong một bảng cụ thể?
Maddy

Câu trả lời:


13

Trong một mô-đun, bạn sẽ sử dụng đoạn mã sau sử dụng phép nội xạ phụ thuộc để gỡ cài đặt. Nó hoạt động tốt như nhau ở bất cứ nơi nào khác, chỉ cần đảm bảo tiêm EavSetupFactory vào hàm tạo và sau đó sử dụng các phương thức của nó để thực hiện công việc.

<?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();

        }
    }

}

Ngoài ra, sử dụng phương thức này sẽ khiến thuộc tính eav tự xóa chính xác khỏi tất cả các bảng, vì chúng được liên kết bằng các ràng buộc.

BTW, tôi khuyên bạn nên sử dụng PHPStorm + xdebug. Bạn sẽ học được rất nhiều về cách tất cả những thứ này kết nối với nhau.


Tập tin gì và nơi này đi đâu?
Đánh dấu

Gỡ cài đặt.php. Nó đi trong thư mục thiết lập mô-đun. Kiểm tra không gian tên. Nó luôn luôn phải phù hợp với tên đường dẫn.
CarComp

1
Bạn cũng có thể sử dụng Customer::ENTITYhoặc Product::ENTITYvv thay vì 1 hoặc 4. ( use Magento\Catalog\Model\Product; use Magento\Customer\Model\Customer;)
Jāni Elmeris

2

Bạn có thể sử dụng \Magento\Eav\Api\AttributeRepositoryInterface::deletecho việc này.


Đúng, nhưng nó ngụ ý rằng anh ta đang xây dựng một mô-đun tùy chỉnh, vì vậy điều đó có nghĩa là giả sử phương thức để tạo và xóa là lập trình. Tuy nhiên, sử dụng api có phần là cách tiếp cận sai, bạn có thể quay lại theo cách của mình từ AttributionRep repositoryInterface đến lớp và các phương thức thực sự làm việc.
CarComp

1
@CarComp, Sử dụng API chỉ là một cách tiếp cận phù hợp, nếu bạn quan tâm đến công việc của mô-đun trên phiên bản mới của Magento. Magento sử dụng chính sách BC chỉ cho api. Và việc thực hiện riêng tư có thể được thay đổi bất cứ lúc nào mà không cần thông báo
KAndy

Tôi chỉ đọc lại những gì tôi đã viết. Tôi không nói đó là cách tiếp cận sai cho tất cả mọi người, ý tôi là chỉ liên quan đến câu hỏi của anh ấy. Ông đã hỏi làm thế nào để làm điều đó trong php.
CarComp

1
API - giao diện với chú thích @api, không phải API Web. Xin lỗi nếu tôi bỏ lỡ điều gì đó
KAndy

1

sử dụng Magento \ Customer \ Model \ Lớp khách hàng thay vì id thực thể như 1 và 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();
  }
}

Chúc mừng mã hóa !!


Cảm ơn anh em giải pháp của bạn đã giải quyết vấn đề của tôi!
Faisal Sheikh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.