Удалить пользовательские атрибуты EAV из базы данных

28

Я хочу удалить неиспользуемые атрибуты EAV непосредственно из базы данных, прежде чем перенести магазин в живую Атрибуты можно найти в eav_attributeтаблице. Могу ли я удалить атрибуты из этой таблицы? Это безопасно? Или мне также нужно редактировать другие таблицы EAV?

zitix
источник

Ответы:

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');
benmarks
источник
1
Спасибо тебе. Я понимаю, как использовать его в скрипте установки модуля: $installer->removeAttribute('catalog_product', 'my_attribute1');или $installer->removeAttribute('catalog_category', 'my_attribute2'); есть ли способ использовать этот код в отдельном файле? Я хотел бы, чтобы поместить файл в корневой папке (где Magento - х index.php), так что можно было бы назвать сценарий в веб - браузере example.com/delete_attributes.php/. Можете ли вы указать мне правильное направление?
Zitix
Обновил мой ответ.
отметки
Какие изменения кода мне нужно сделать, чтобы удалить пользовательский атрибут клиента?
Шаси Кант
1
@shasikanth - это действительно отдельный вопрос, но поменяйте местами catalog/setupс customer/setup, catalog_setupс customer_setupи catalog_productс customer.
отметки
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
Это должно быть хорошо. Просто убедитесь, что нет двух атрибутов с одинаковым кодом для разных объектов.
Мариус
3

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

это рабочее решение, я использовал его много раз.

Особенно, если вы удалите расширение, а Magento все еще захочет вызвать несуществующую модель атрибута.

Мартин
источник