Hapus atribut EAV khusus dari database

28

Saya ingin menghapus atribut EAV yang tidak digunakan langsung dari database sebelum saya memindahkan toko saya hidup. Atribut dapat ditemukan dalam eav_attributetabel, dapatkah saya menghapus atribut dari tabel ini? Apakah ini aman? Atau apakah saya juga perlu mengedit tabel EAV lainnya?

zitix
sumber

Jawaban:

39

Lihat Mage_Eav_Model_Entity_Setup::removeAttribute(). Dibutuhkan dua argumen - yang pertama adalah kode entitas, dan yang kedua adalah kode atribut.

Edit - untuk dijalankan dari lingkup non-instalasi:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
tanda batas
sumber
1
Terima kasih. Saya mengerti cara menggunakannya dalam skrip pengaturan modul: $installer->removeAttribute('catalog_product', 'my_attribute1');atau $installer->removeAttribute('catalog_category', 'my_attribute2'); Tetapi apakah ada cara untuk menggunakan kode ini dalam file terpisah? Saya ingin menempatkan file dalam folder root (di mana Magento index.php), sehingga akan ada kemungkinan untuk memanggil script di browser web: example.com/delete_attributes.php/. Bisakah Anda mengarahkan saya ke arah yang benar?
zitix
Memperbarui respons saya.
patokan
Perubahan kode apa yang perlu saya lakukan, untuk menghapus atribut pelanggan khusus?
shasi kanth
1
@shasikanth - ini benar-benar pertanyaan terpisah, tetapi bertukar catalog/setupdengan customer/setup, catalog_setupdengan customer_setup, dan catalog_productdengan customer.
manfaat
12

Aturan pertama Magento adalah: Jangan pernah mengedit database secara langsung.
Saya akui saya melanggar aturan ini pada banyak kesempatan, jadi ...
Anda dapat menghapus atribut dari eav_attribute, kendala dengan ON DELETE CASCADEharus membersihkan sisa tabel.
Tapi saya masih berpikir Anda harus mengambil jalan yang bersih:

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

Seharusnya tidak butuh waktu lama dan Anda akan merasa damai dengan diri Anda sendiri karena Anda tidak melanggar aturan.
Tidak penting metode apa yang Anda pilih, tetapi mencadangkan DB Anda, dalam kedua kasus tersebut.

Marius
sumber
3
Saya selalu mencoba untuk menghindari mengedit database, tetapi jauh lebih cepat untuk melakukannya dengan cara ini :) dan kali ini hanya untuk pengujian (bukan untuk situs produksi). Jadi, apakah permintaan ini cukup untuk menghilangkan atribut, atau apakah saya perlu melakukan sesuatu yang lebih:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix
Ini harusnya eoungh. Pastikan tidak ada 2 atribut dengan kode yang sama, untuk entitas yang berbeda.
Marius
3

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

adalah solusi yang berfungsi , saya menggunakannya berkali-kali.

Terutama jika Anda menghapus ekstensi dan Magento masih ingin memanggil model atribut yang tidak ada

Martin
sumber