डेटाबेस से कस्टम EAV विशेषताएँ हटाएं


28

मैं अपने स्टोर को लाइव करने से पहले डेटाबेस से अप्रयुक्त ईएवी विशेषताओं को सीधे हटाना चाहता हूं। विशेषताएँ eav_attributeतालिका में पाई जा सकती हैं , क्या मैं इस तालिका से विशेषताएँ हटा सकता हूं? क्या ये सुरक्षित है? या क्या मुझे अन्य EAV तालिकाओं को संपादित करने की भी आवश्यकता है?

जवाबों:


39

देख लो Mage_Eav_Model_Entity_Setup::removeAttribute()। इसमें दो तर्क दिए गए हैं - पहला इकाई कोड है, और दूसरा विशेषता कोड है।

संपादित करें - एक गैर-संस्थापन क्षेत्र से चलाने के लिए:

<?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'); लेकिन एक अलग फ़ाइल में इस कोड का उपयोग करने का एक तरीका है? मैं फ़ाइल को रूट फ़ोल्डर (जहां मैगेंटो के index.php) में रखना चाहता हूं , ताकि वेब ब्राउज़र में स्क्रिप्ट को कॉल करना संभव होगा example.com/delete_attributes.php/:। क्या मुझे आपसे सही दिशा निर्देशन मिलेगा?
9

मेरी प्रतिक्रिया अपडेट की गई।
15

कस्टम ग्राहक विशेषता को हटाने के लिए मुझे किस कोड में बदलाव करना होगा?
shasi kant

1
@shasikanth - यह वास्तव में एक अलग सवाल है, लेकिन स्वैप catalog/setupके साथ customer/setup, catalog_setupके साथ customer_setup, और catalog_productसाथ 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";
झूले

यह यूं ही होना चाहिए। बस सुनिश्चित करें कि विभिन्न संस्थाओं के लिए एक ही कोड के साथ 2 विशेषताएँ नहीं हैं।
मेरियस

3

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

एक काम कर समाधान है, मैं इसे कई बार इस्तेमाल किया।

विशेष रूप से यदि आप एक्सटेंशन को हटाते हैं और मैगेंटो अभी भी अस्पष्टीकृत विशेषता मॉडल को कॉल करना चाहते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.