Eliminar atributos EAV personalizados de la base de datos

28

Quiero eliminar los atributos EAV no utilizados directamente de la base de datos antes de mover mi tienda en vivo. Los atributos se pueden encontrar en la eav_attributetabla, ¿puedo eliminar los atributos de esta tabla? ¿Es seguro? ¿O también necesito editar otras tablas EAV?

zitix
fuente

Respuestas:

39

Ver Mage_Eav_Model_Entity_Setup::removeAttribute(). Se necesitan dos argumentos: el primero es el código de entidad y el segundo es el código de atributo.

Editar: para ejecutar desde un ámbito que no sea de instalación:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
puntos de referencia
fuente
1
Gracias. Entiendo cómo usarlo en un script de configuración de un módulo: $installer->removeAttribute('catalog_product', 'my_attribute1');o ¿ $installer->removeAttribute('catalog_category', 'my_attribute2'); Pero hay alguna manera de usar este código en un archivo separado? Me gustaría colocar el archivo en la carpeta raíz (donde de Magento index.php), por lo que sería posible llamar al script en el navegador web: example.com/delete_attributes.php/. ¿Me puede apuntar en la dirección correcta?
zitix
Actualicé mi respuesta.
Benmarks
¿Qué cambios de código debo hacer para eliminar un atributo de cliente personalizado?
shasi kanth
1
@shasikanth: es realmente una pregunta separada, pero intercambia catalog/setupcon customer/setup, catalog_setupcon customer_setupy catalog_productcon customer.
Benmarks
12

La primera regla de Magento es: nunca edite la base de datos directamente.
Admito que violé esta regla en numerosas ocasiones, así que ...
puedes eliminar los atributos eav_attribute, las restricciones ON DELETE CASCADEdeberían limpiar el resto de las tablas.
Pero sigo pensando que deberías tomar el camino limpio:

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

No debería tomar mucho tiempo y te sentirás en paz contigo mismo porque no rompiste las reglas.
No es importante el método que elija, pero en ambos casos es una copia de seguridad de su base de datos.

Marius
fuente
3
Siempre trato de evitar editar la base de datos, pero es mucho más rápido hacerlo de esta manera :) y esta vez es solo para probar (no para el sitio de producción). Así es esto suficiente consulta para deshacerse del atributo, o necesito hacer algo más:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix
Esto debería ser suficiente. Solo asegúrese de que no haya 2 atributos con el mismo código, para diferentes entidades.
Marius
3

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

es una solución que funciona , la usé muchas veces.

Especialmente si elimina la extensión y Magento todavía quiere llamar al modelo de atributo inexistente

Martín
fuente