Usuń niestandardowe atrybuty EAV z bazy danych

28

Chcę usunąć nieużywane atrybuty EAV bezpośrednio z bazy danych przed przeniesieniem mojego sklepu na żywo. Atrybuty można znaleźć w eav_attributetabeli, czy mogę usunąć atrybuty z tej tabeli? Czy to jest bezpieczne? Czy też muszę edytować inne tabele EAV?

zitix
źródło

Odpowiedzi:

39

Zobaczyć Mage_Eav_Model_Entity_Setup::removeAttribute(). Wymaga dwóch argumentów - pierwszy to kod jednostki, a drugi to kod atrybutu.

Edytuj - aby uruchomić z zakresu nieinstalacyjnego:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
zalety
źródło
1
Dzięki. Rozumiem, jak używać go w skrypcie instalacyjnym modułu: $installer->removeAttribute('catalog_product', 'my_attribute1');lub $installer->removeAttribute('catalog_category', 'my_attribute2'); Ale czy istnieje sposób na użycie tego kodu w osobnym pliku? Chciałbym umieścić plik w folderze głównym (gdzie Magento index.php), dzięki czemu możliwe byłoby zadzwonić skrypt w przeglądarce internetowej example.com/delete_attributes.php/. Czy możesz wskazać mi właściwy kierunek?
zitix
Zaktualizowałem moją odpowiedź.
zyskuje
Jakie zmiany w kodzie muszę wykonać, aby usunąć niestandardowy atrybut klienta?
shasi kanth
1
@shasikanth - to naprawdę osobne pytanie, ale zamień catalog/setupz customer/setup, catalog_setupz customer_setupi catalog_productz customer.
zyskuje
12

Pierwsza zasada Magento: Nigdy nie edytuj bazy danych bezpośrednio.
Przyznaję, że wielokrotnie łamałem tę zasadę, więc ...
możesz usunąć atrybuty eav_attribute, ograniczenia z ON DELETE CASCADEpowinny oczyścić resztę tabel.
Ale nadal uważam, że powinieneś pójść czystą drogą:

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

Nie powinno to potrwać długo, a poczujesz się ze sobą w spokoju, ponieważ nie złamałeś zasad.
Nie jest ważne, jaką metodę wybierzesz, ale w obu przypadkach tworzona jest kopia zapasowa bazy danych.

Marius
źródło
3
Zawsze staram się unikać edytowania bazy danych, ale robi się to znacznie szybciej :) Tym razem jest to tylko do testowania (nie dla strony produkcyjnej). Czy to pytanie wystarczy, aby pozbyć się atrybutu, czy też muszę zrobić coś więcej:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix,
To powinno być eoungh. Upewnij się tylko, że nie ma 2 atrybutów z tym samym kodem dla różnych podmiotów.
Marius
3

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

jest działającym rozwiązaniem, korzystałem z niego wiele razy.

Zwłaszcza jeśli usuniesz rozszerzenie, a Magento nadal chce wywołać nieistniejący model atrybutu

Jaskółka oknówka
źródło