Supprimer les attributs EAV personnalisés de la base de données


28

Je souhaite supprimer les attributs EAV inutilisés directement de la base de données avant de déplacer mon magasin en direct. Les attributs peuvent être trouvés dans le eav_attributetableau, puis-je supprimer des attributs de ce tableau? Est-ce sûr? Ou dois-je également modifier d'autres tables EAV?

Réponses:


39

Tu vois Mage_Eav_Model_Entity_Setup::removeAttribute(). Il prend deux arguments - le premier est le code d'entité et le second est le code d'attribut.

Modifier - pour exécuter à partir d'une portée non-installation:

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

1
Merci. Je comprends comment l'utiliser dans un script de configuration d'un module: $installer->removeAttribute('catalog_product', 'my_attribute1');ou $installer->removeAttribute('catalog_category', 'my_attribute2'); Mais existe-t-il un moyen d'utiliser ce code dans un fichier séparé? Je voudrais placer le fichier dans le dossier racine (où Magento de index.php), de sorte qu'il serait possible d'appeler le script dans le navigateur Web: example.com/delete_attributes.php/. Pouvez-vous me diriger dans la bonne direction?
zitix

Mis à jour ma réponse.
benmarks

Quels changements de code dois-je faire pour supprimer un attribut client personnalisé?
shasi kanth

1
@shasikanth - c'est vraiment une question distincte, mais échangez catalog/setupavec customer/setup, catalog_setupavec customer_setupet catalog_productavec customer.
benmarks

12

La première règle de Magento est la suivante: ne modifiez jamais la base de données directement.
J'avoue que j'ai enfreint cette règle à plusieurs reprises, donc ...
vous pouvez supprimer les attributs de eav_attribute, les contraintes avec ON DELETE CASCADEdevraient nettoyer le reste des tables.
Mais je pense toujours que vous devriez prendre la voie propre:

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

Cela ne devrait pas prendre longtemps et vous vous sentirez en paix avec vous-même parce que vous n'avez pas enfreint les règles.
Peu importe la méthode que vous choisissez, mais la sauvegarde de votre base de données est, dans les deux cas.


3
J'essaie toujours d'éviter de modifier la base de données, mais c'est beaucoup plus rapide de le faire de cette façon :) et cette fois, c'est uniquement pour les tests (pas pour le site de production). Cette requête est-elle donc suffisante pour se débarrasser de l'attribut, ou dois-je faire quelque chose de plus:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix

Cela devrait être bon. Assurez-vous simplement qu'il n'y a pas 2 attributs avec le même code, pour différentes entités.
Marius

3

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

est une solution de travail , je l'ai utilisée plusieurs fois.

Surtout si vous supprimez l'extension et que Magento veut toujours appeler un modèle d'attribut inexistant

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.