Odpowiedzi:
Zobaczyć Mage_Eav_Model_Entity_Setup::removeAttribute()
. Wymaga dwóch argumentów - pierwszy to kod jednostki, a drugi to kod atrybutu.
Edytuj - aby uruchomić z zakresu nieinstalacyjnego:
<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
catalog/setup
z customer/setup
, catalog_setup
z customer_setup
i catalog_product
z customer
.
Pierwsza zasada Magento: Nigdy nie edytuj bazy danych bezpośrednio.
Przyznaję, że wielokrotnie łamałem tę zasadę, więc ...
możesz usunąć atrybuty eav_attribute
, ograniczenia z ON DELETE CASCADE
powinny oczyścić resztę tabel.
Ale nadal uważam, że powinieneś pójść czystą drogą:
$attributeId = 55;
Mage::getModel('catalog/resource_eav_attribute')->load($attributeId)->delete();
Nie powinno to potrwać długo, a poczujesz się ze sobą w spokoju, ponieważ nie złamałeś zasad.
Nie jest ważne, jaką metodę wybierzesz, ale w obu przypadkach tworzona jest kopia zapasowa bazy danych.
DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "some_attr_code";
jest działającym rozwiązaniem, korzystałem z niego wiele razy.
Zwłaszcza jeśli usuniesz rozszerzenie, a Magento nadal chce wywołać nieistniejący model atrybutu
$installer->removeAttribute('catalog_product', 'my_attribute1');
lub$installer->removeAttribute('catalog_category', 'my_attribute2');
Ale czy istnieje sposób na użycie tego kodu w osobnym pliku? Chciałbym umieścić plik w folderze głównym (gdzie Magentoindex.php
), dzięki czemu możliwe byłoby zadzwonić skrypt w przeglądarce internetowejexample.com/delete_attributes.php/
. Czy możesz wskazać mi właściwy kierunek?