Elimina gli attributi EAV personalizzati dal database


28

Voglio rimuovere gli attributi EAV inutilizzati direttamente dal database prima di spostare il mio negozio dal vivo. Gli attributi sono disponibili nella eav_attributetabella, posso eliminare gli attributi da questa tabella? È sicuro? O devo anche modificare altre tabelle EAV?

Risposte:


39

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');

1
Grazie. Capisco come usarlo in uno script di installazione di un modulo: $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 Magento index.php), in modo che sia possibile chiamare lo script nel browser web: example.com/delete_attributes.php/. Puoi indicarmi la giusta direzione?
zitix,

Aggiornato la mia risposta.
benmark

Quali modifiche al codice devo fare per eliminare un attributo cliente personalizzato?
Shasi Kanth,

1
@shasikanth - è davvero una domanda separata, ma scambia catalog/setupcon customer/setup, catalog_setupcon customer_setupe catalog_productcon customer.
benmarks

12

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 CASCADEdovrebbero 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.


3
Cerco sempre di evitare la modifica del database, ma è molto più veloce farlo in questo modo :) e questa volta è solo per i test (non per il sito di produzione). Quindi questa query è sufficiente per sbarazzarsi dell'attributo o devo fare qualcosa di più:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix

Questo dovrebbe essere eoungh. Assicurati solo che non ci siano 2 attributi con lo stesso codice, per entità diverse.
Marius

3

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.