从数据库中删除自定义EAV属性


28

我想在直接移动商店之前直接从数据库中删除未使用的EAV属性。属性可以在eav_attribute表中找到,我可以从该表中删除属性吗?安全吗?还是我还需要编辑其他EAV表?

Answers:


39

请参阅Mage_Eav_Model_Entity_Setup::removeAttribute()。它有两个参数-第一个是实体代码,第二个是属性代码。

编辑-从非安装范围运行:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');

1
谢谢。我了解如何在模块的安装脚本中使用它: $installer->removeAttribute('catalog_product', 'my_attribute1');$installer->removeAttribute('catalog_category', 'my_attribute2'); 但是有没有办法在单独的文件中使用此代码?我想将该文件放在根文件夹(Magento的文件夹index.php)中,以便可以在Web浏览器中调用该脚本:example.com/delete_attributes.php/。你能为我指出正确的方向吗?
zitix

更新了我的回复。
benmarks

我需要做哪些代码更改才能删除自定义客户属性?
shasi kanth

1
@shasikanth -这真是一个单独的问题,但换catalog/setupcustomer/setupcatalog_setupcustomer_setup,并catalog_productcustomer
benmarks

12

Magento的第一条规则是:切勿直接编辑数据库。
我承认我在很多场合都违反了此规则,因此...
您可以从中删除属性eav_attribute,使用约束ON DELETE CASCADE可以清除其余表。
但我仍然认为您应该采取干净的方法:

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

用不了多久,您就会感到安心,因为您没有违反规则。
选择哪种方法并不重要,但是在两种情况下,备份数据库都是重要的。


3
我总是尽量避免编辑数据库,但是这样做的速度要快得多:),这一次仅用于测试(不适用于生产站点)。那么此查询是否足以摆脱该属性,还是我需要做更多事情:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix

应该是eoungh。只需确保没有2个具有相同代码的属性即可用于不同的实体。
Marius

3

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

是一个可行的解决方案,我使用了很多次。

尤其是如果您删除扩展名并且Magento仍然想调用不存在的属性模型

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.