Özel EAV niteliklerini veritabanından silme


28

Mağazamı canlı taşımadan önce, kullanılmayan EAV niteliklerini doğrudan veritabanından kaldırmak istiyorum. Özellikler eav_attributetabloda bulunabilir, bu tablodaki özellikleri silebilir miyim? Güvenli mi? Yoksa diğer EAV tablolarını da düzenlemem gerekir mi?

Yanıtlar:


39

Bakın Mage_Eav_Model_Entity_Setup::removeAttribute(). İki argüman alır - ilki varlık kodu, ikincisi özellik kodu.

Düzenle - kurulum dışı bir kapsamdan çalıştırmak için:

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

1
Teşekkür ederim. Bir modülün kurulum komut dosyasında nasıl kullanılacağını biliyorum: $installer->removeAttribute('catalog_product', 'my_attribute1');veya $installer->removeAttribute('catalog_category', 'my_attribute2'); Ama bu kodu ayrı bir dosyada kullanmanın bir yolu var mı? Ben (Magento en nerede kök klasöründe dosyayı yerleştirmek istiyorum index.php), bu yüzden mümkün olacağını web tarayıcısında komut dosyası çağırmak için: example.com/delete_attributes.php/. Beni doğru yöne çevirebilir misin?
zitix

Cevabım güncellendi.
Benmarks

Özel bir müşteri özelliğini silmek için hangi kod değişikliklerini yapmam gerekiyor?
shasi kanth

1
@shasikanth - gerçekten ayrı bir soru, ama takas catalog/setupile customer/setup, catalog_setupbirlikte customer_setupve catalog_productbirlikte customer.
benmarks

12

Magento'nun ilk kuralı şudur: Asla veritabanını doğrudan düzenlemeyin.
Birçok kez bu kuralı çiğnediğimi itiraf ediyorum, bu yüzden ...
öznitelikleri silebilirsiniz eav_attribute, kısıtlamaların ON DELETE CASCADEgeri kalanı tabloları temizlemesi gerekir.
Ama yine de temiz bir yol almalısın:

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

Uzun sürmemelidir ve kuralları kendiniz ile rahat hissedersiniz, çünkü kuralları çiğnediniz.
Hangi yöntemi seçtiğinizin önemli değil, ancak her iki durumda da DB'nizi yedeklemeniz önemlidir.


3
Her zaman veritabanını düzenlemekten kaçınmaya çalışırım, ancak bu şekilde yapmak çok daha hızlı olur :) ve bu sefer yalnızca test amaçlıdır (üretim sahası için değil). Öyleyse bu sorgu öznitelikten kurtulmak için yeterli mi, yoksa daha fazlasını yapmam gerekiyor mu:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix

Bu eoungh olmalı. Farklı varlıklar için aynı kodda 2 özellik olmadığından emin olun.
Marius

3

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

Bir olan çalışma çözümü Bunu pek çok kez kullandım.

Özellikle, uzantıyı kaldırırsanız ve Magento hala var olmayan öznitelik modelini aramak istiyorsa

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.