Löschen Sie benutzerdefinierte EAV-Attribute aus der Datenbank

28

Ich möchte nicht verwendete EAV-Attribute direkt aus der Datenbank entfernen, bevor ich mein Geschäft in den Live-Zustand versetze. Attribute finden Sie in der eav_attributeTabelle. Kann ich Attribute aus dieser Tabelle löschen? Ist es sicher? Oder muss ich auch andere EAV-Tabellen bearbeiten?

zitix
quelle

Antworten:

39

Sehen Mage_Eav_Model_Entity_Setup::removeAttribute(). Es sind zwei Argumente erforderlich - das erste ist der Entitätscode und das zweite ist der Attributcode.

Bearbeiten , um von einem Nicht-Installationsbereich auszuführen:

<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
benmarks
quelle
1
Danke dir. Ich verstehe, wie man es in einem Setup-Skript eines Moduls verwendet: $installer->removeAttribute('catalog_product', 'my_attribute1');oder $installer->removeAttribute('catalog_category', 'my_attribute2'); Gibt es eine Möglichkeit, diesen Code in einer separaten Datei zu verwenden? Ich mag die Datei im Stammordner platzieren (wo Magento index.php), so dass es möglich wäre , das Skript im Webbrowser zu nennen: example.com/delete_attributes.php/. Können Sie mich in die richtige Richtung weisen?
Zitix
Meine Antwort wurde aktualisiert.
benmarks
Welche Codeänderungen muss ich vornehmen, um ein benutzerdefiniertes Kundenattribut zu löschen?
Shasi kanth
1
@shasikanth - es ist wirklich eine separate Frage, aber tauschen Sie catalog/setupmit customer/setup, catalog_setupmit customer_setupund catalog_productmit customer.
benmarks
12

Die erste Regel von Magento lautet: Bearbeiten Sie die Datenbank niemals direkt.
Ich gebe zu, dass ich mehrfach gegen diese Regel verstoßen habe, also ... können
Sie die Attribute von löschen eav_attribute, die Einschränkungen mit ON DELETE CASCADEsollten den Rest der Tabellen bereinigen.
Aber ich denke immer noch, du solltest den sauberen Weg gehen:

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

Es sollte nicht lange dauern und Sie werden sich in Frieden mit sich selbst fühlen, weil Sie nicht gegen die Regeln verstoßen haben.
Es ist nicht wichtig, für welche Methode Sie sich entscheiden, aber in beiden Fällen ist es wichtig, Ihre Datenbank zu sichern.

Marius
quelle
3
Ich versuche immer, das Bearbeiten der Datenbank zu vermeiden, aber es geht viel schneller :) und diesmal nur zum Testen (nicht für die Produktionsstätte). Reicht diese Abfrage aus, um das Attribut zu DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
entfernen
Das sollte eoungh sein. Stellen Sie nur sicher, dass es nicht zwei Attribute mit demselben Code für verschiedene Entitäten gibt.
Marius
3

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

ist eine funktionierende Lösung, die ich oft benutzt habe.

Vor allem, wenn Sie die Erweiterung entfernen und Magento weiterhin ein nicht existierendes Attributmodell aufrufen möchte

Martin
quelle