Xóa các thuộc tính EAV tùy chỉnh khỏi cơ sở dữ liệu


28

Tôi muốn xóa các thuộc tính EAV không sử dụng trực tiếp khỏi cơ sở dữ liệu trước khi tôi chuyển cửa hàng của mình trực tiếp. Các thuộc tính có thể được tìm thấy trong eav_attributebảng, tôi có thể xóa các thuộc tính khỏi bảng này không? Nó có an toàn không? Hay tôi cũng cần chỉnh sửa các bảng EAV khác?

Câu trả lời:


39

Xem Mage_Eav_Model_Entity_Setup::removeAttribute(). Phải có hai đối số - đầu tiên là mã thực thể và thứ hai là mã thuộc tính.

Chỉnh sửa - để chạy từ phạm vi không cài đặt:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');

1
Thnk bạn. Tôi hiểu cách sử dụng nó trong tập lệnh thiết lập của mô-đun: $installer->removeAttribute('catalog_product', 'my_attribute1');hoặc $installer->removeAttribute('catalog_category', 'my_attribute2'); Nhưng có cách nào để sử dụng mã này trong một tệp riêng không? Tôi muốn đặt tệp vào thư mục gốc (nơi Magento's index.php), để có thể gọi tập lệnh trong trình duyệt web : example.com/delete_attributes.php/. Bạn có thể chỉ cho mình hướng chính xác được không?
zitix

Cập nhật phản hồi của tôi.
đánh dấu

Những thay đổi mã tôi cần phải làm, để xóa một thuộc tính khách hàng tùy chỉnh?
shasi kanth

1
@shasikanth - đó thực sự là một câu hỏi riêng biệt, nhưng trao đổi catalog/setupvới customer/setup, catalog_setupvới customer_setupcatalog_productvới customer.
đánh dấu

12

Nguyên tắc đầu tiên của Magento là: Không bao giờ chỉnh sửa cơ sở dữ liệu trực tiếp.
Tôi thừa nhận rằng tôi đã phá vỡ quy tắc này trong nhiều trường hợp, vì vậy ...
bạn có thể xóa các thuộc tính khỏi eav_attribute, các ràng buộc với ON DELETE CASCADEsẽ dọn sạch phần còn lại của các bảng.
Nhưng tôi vẫn nghĩ bạn nên làm theo cách sạch sẽ:

$attributeId = 55;
Mage::getModel('catalog/resource_eav_attribute')->load($attributeId)->delete();

Sẽ không mất nhiều thời gian và bạn sẽ cảm thấy bình yên với chính mình vì bạn đã không phá vỡ các quy tắc.
Việc bạn chọn phương thức nào không quan trọng, nhưng sao lưu DB của bạn, trong cả hai trường hợp.


3
Tôi luôn cố gắng tránh chỉnh sửa cơ sở dữ liệu, nhưng nó nhanh hơn nhiều để làm theo cách này :) và lần này nó chỉ dành cho thử nghiệm (không dành cho trang web sản xuất). Vậy là truy vấn này đủ để loại bỏ thuộc tính hay tôi cần phải làm gì đó hơn nữa:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix

Điều này nên được eoungh. Chỉ cần đảm bảo không có 2 thuộc tính có cùng mã cho các thực thể khác nhau.
Marius

3

DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "some_attr_code";

là một giải pháp làm việc , tôi đã sử dụng nó nhiều lần.

Đặc biệt nếu bạn xóa tiện ích mở rộng và Magento vẫn muốn gọi mô hình thuộc tính chưa có

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.