Excluir atributos EAV personalizados do banco de dados

28

Desejo remover atributos EAV não utilizados diretamente do banco de dados antes de mover minha loja ao vivo. Os atributos podem ser encontrados na eav_attributetabela. Posso excluir atributos desta tabela? É seguro? Ou também preciso editar outras tabelas EAV?

zitix
fonte

Respostas:

39

Veja Mage_Eav_Model_Entity_Setup::removeAttribute(). São necessários dois argumentos - o primeiro é o código da entidade e o segundo é o código do atributo.

Editar - para executar a partir de um escopo de não instalação:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
benmarks
fonte
1
Obrigado. Eu entendo como usá-lo em um script de instalação de um módulo: $installer->removeAttribute('catalog_product', 'my_attribute1');ou $installer->removeAttribute('catalog_category', 'my_attribute2'); Mas existe uma maneira de usar esse código em um arquivo separado? Eu gostaria de colocar o arquivo na pasta raiz (onde de Magento index.php), de modo que seria possível chamar o script no navegador da Web: example.com/delete_attributes.php/. Você pode me apontar na direção certa?
zitix
Atualizei minha resposta.
benmarks 07/07
Quais alterações de código eu preciso fazer para excluir um atributo de cliente personalizado?
Shasi kanth
1
@ shasikanth - é realmente uma pergunta separada, mas troque catalog/setupcom customer/setup, catalog_setupcom customer_setupe catalog_productcom customer.
benmarks 13/06/17
12

A primeira regra do Magento é: nunca edite o banco de dados diretamente.
Admito que quebrei essa regra em várias ocasiões, então ...
você pode excluir os atributos de eav_attribute, as restrições com ON DELETE CASCADEdevem limpar o restante das tabelas.
Mas ainda acho que você deve seguir o caminho limpo:

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

Não deve demorar muito e você se sentirá em paz consigo mesmo porque não violou as regras.
Não é importante qual método você escolhe, mas sim o backup do seu banco de dados, nos dois casos.

Marius
fonte
3
Eu sempre tento evitar a edição do banco de dados, mas é muito mais rápido fazê-lo dessa maneira :) e desta vez é apenas para testes (não para o site de produção). Então, isso é suficiente consulta para se livrar do atributo, ou eu preciso fazer algo mais:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix
Isso deve ser bom. Apenas verifique se não há dois atributos com o mesmo código, para entidades diferentes.
Marius
3

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

é uma solução funcional , eu a usei várias vezes.

Especialmente se você remover a extensão e o Magento ainda quiser chamar um modelo de atributo inexistente

Martin
fonte