Risposte:
Vedere Mage_Eav_Model_Entity_Setup::removeAttribute()
. Sono necessari due argomenti: il primo è il codice entità e il secondo è il codice attributo.
Modifica: per eseguire da un ambito non di installazione:
<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
catalog/setup
con customer/setup
, catalog_setup
con customer_setup
e catalog_product
con customer
.
La prima regola di Magento è: non modificare mai direttamente il database.
Ammetto di aver infranto questa regola in numerose occasioni, quindi ...
puoi eliminare gli attributi eav_attribute
, i vincoli con ON DELETE CASCADE
dovrebbero ripulire il resto delle tabelle.
Ma penso ancora che dovresti prendere la strada pulita:
$attributeId = 55;
Mage::getModel('catalog/resource_eav_attribute')->load($attributeId)->delete();
Non dovresti impiegare molto e ti sentirai in pace con te stesso perché non hai infranto le regole.
Non è importante quale metodo scegliate, ma in entrambi i casi è il backup del DB.
DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "some_attr_code";
è una soluzione funzionante , l'ho usata molte volte.
Soprattutto se si rimuove l'estensione e Magento vuole ancora chiamare un modello di attributo inesistente
$installer->removeAttribute('catalog_product', 'my_attribute1');
o$installer->removeAttribute('catalog_category', 'my_attribute2');
Ma c'è un modo per usare questo codice in un file separato? Mi piacerebbe inserire il file nella cartella principale (dove di Magentoindex.php
), in modo che sia possibile chiamare lo script nel browser web:example.com/delete_attributes.php/
. Puoi indicarmi la giusta direzione?