データベースからカスタムEAV属性を削除する


28

ストアをライブに移動する前に、未使用のEAV属性をデータベースから直接削除したい。属性はeav_attribute表にありますが、この表から属性を削除できますか?安全ですか?または、他のEAVテーブルも編集する必要がありますか?

回答:


39

をご覧くださいMage_Eav_Model_Entity_Setup::removeAttribute()。2つの引数を取ります。1つ目はエンティティコードで、2つ目は属性コードです。

編集-非インストールスコープから実行するには:

<?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、Webブラウザーでスクリプトを呼び出すことができるようにしますexample.com/delete_attributes.php/。私を正しい方向に向けることができますか?
zitix

応答を更新しました。
ベンチマーク

カスタム顧客属性を削除するには、どのようなコード変更が必要ですか?
shasi kanth

1
@shasikanth-それは本当に別の質問ですが、catalog/setupwith customer/setupcatalog_setupwith customer_setup、およびcatalog_productwith と交換しcustomerます。
ベンマーク

12

Magentoの最初のルールは次のとおりです。データベースを直接編集しないでください。
私は何度もこのルールを破ったことを認めているので、...
から属性を削除できます。eav_attribute制約ON DELETE CASCADEは残りのテーブルをクリーンアップする必要があります。
しかし、私はまだあなたがきれいな方法を取るべきだと思います:

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

時間がかかりませんし、ルールを破らなかったので、あなたは自分自身との平和を感じるでしょう。
どの方法を選択するかは重要ではありませんが、どちらの場合もDBのバックアップは重要です。


3
私は常にデータベースの編集を避けようとしますが、この方法で行う方がはるかに高速です:)、今回はテスト用です(本番サイトではありません)。したがって、このクエリは属性を取り除くのに十分ですか、それとももっと何かをする必要がありますかDELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
-zitix

これは長続きするはずです。異なるエンティティに対して、同じコードの2つの属性がないことを確認してください。
マリウス

3

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

ある作業ソリューションは、私は何度もそれを使用しました。

特に、拡張子を削除しても、Magentoがまだ存在しない属性モデルを呼び出したい場合

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.