Видаліть власні атрибути EAV з бази даних


28

Я хочу видалити невикористані атрибути EAV безпосередньо з бази даних, перш ніж перенести свій магазин наживо. Атрибути можна знайти в eav_attributeтаблиці, чи можна видалити атрибути з цієї таблиці? Це безпечно? Або мені також потрібно редагувати інші таблиці EAV?

Відповіді:


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), так що можна було б назвати сценарій в веб - браузері 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

Це має бути eoungh. Просто переконайтеся, що немає двох атрибутів з одним і тим же кодом для різних об'єктів.
Маріус

3

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

це робоче рішення, я його використовував багато разів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.