स्क्रिप्ट स्थापित करें: टेबल बनाना बनाम मौजूदा अपडेट करना


22

एक सवाल है, हाल ही में मैं डीबी में बहुत सारी तालिकाओं के साथ एक मॉड्यूल विकसित कर रहा था, और अवधारणा अक्सर बदल रही थी, इसलिए डीबी में मौजूदा तालिकाओं को बदलने की आवश्यकता थी, और मैंने तालिका में स्क्रिप्ट और टेबल अपग्रेड बनाने में अंतर देखा। हेयर यू गो। नीचे तालिका कोड बनाने पर गौर करें:

$table = $installer->getConnection()
    ->newTable($installer->getTable('module/table'))
    ->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, 9, array(
        'nullable' => false,
        'primary' => true,
        'identity' => true,
        'auto_increment' => true
    )
);

newTable () के समारोह रिटर्न उदाहरण Varien_Db_Ddl_Table और उन्नयन तालिका स्क्रिप्ट मौजूदा टेबल में नया स्तंभ जोड़ना, एक बार देख ले अलग तरह से उपयोग करता है:

$installer->getConnection()
    ->addColumn($tableName, 'test', array(
        'nullable' => false,
        'length' => 9,
        'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
        'comment' => 'Test Field'
    )
)

ये दो अतिरिक्त कार्य अलग-अलग हैं और यह भी कि वे विभिन्न वर्गों के तरीके हैं, और वे मुझे हर बार दुखी करते हैं, मुझे सिंटैक्स को बदलने की आवश्यकता है।
तो यहाँ सवाल है, क्या Varien_Db_Ddl_Table वर्ग के उदाहरण का उपयोग करके मौजूदा तालिका को अद्यतन करने का कोई तरीका है ?

जवाबों:


15

Varien_Db_Ddl_Table ऑब्जेक्ट का उपयोग करके मौजूदा तालिका को संशोधित करने का एक तरीका प्रतीत नहीं होता है। यदि आप उस वर्ग के लिए कोड में जाते हैं, तो आपको कोई ऐसा क्षेत्र नहीं दिखाई देगा जहाँ वह तालिका के लिए मौजूदा स्कीमा में खींचता है, या यह देखने के लिए भी जाँच करता है कि तालिका किसी भी तरह से मौजूद है या नहीं। यदि आपको टेबल को संशोधित करने के लिए उपयोग करना है तो यह आवश्यक होगा।

इसके अतिरिक्त, Varien_Db_Adapter_Interface में 'updateTable' की तर्ज पर कोई विधि नहीं है जो एक Varien_Db_Ddl_Table ऑब्जेक्ट को एक पैरामीटर के रूप में लेता है।

यह निश्चित रूप से मैगेंटो में उन 'कोड गंध' में से एक है, क्योंकि आपके पास कोड के दो पूरी तरह से अलग-अलग ब्लॉक हैं जो एक ही चीज़ को अलग-अलग तरीकों से पूरा करने का प्रयास करते हैं। केवल कीड़े के लिए नेतृत्व करेंगे।


अच्छा जवाब, मैंने सोचा जितना, धन्यवाद :)
निक

2
और अब इसे ठीक करने के लिए एक Magento 2 पुल अनुरोध करें :-)
एलेक्स

6

यदि यह परियोजना के दायरे में है तो आप एक ईएवी मॉडल में बदलना चाह सकते हैं यदि मॉडल बहुत बार बदल रहा है जैसा कि आपने उल्लेख किया है। यह आपको डेटा माइग्रेशन को आगे और पीछे भ्रमित करने की परेशानी से बचा सकता है। यहां एक लेख है जो मैगेंटो में ईएवी की मूल बातें बताता है ताकि आप इसका मूल्यांकन कर सकें और यह तय कर सकें कि यह आपकी परियोजना के लिए उपयुक्त है।

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