जब आप schema-tool
उपयोग कर रहे हैं, डेटाबेस संशोधन का कोई इतिहास रखा जाता है, और एक उत्पादन/स्टेजिंग वातावरण में यह एक बड़ा नकारात्मक पहलू है।
मान लें कि आपके पास एक लाइव प्रोजेक्ट में एक जटिल डेटाबेस संरचना है। और अगले परिवर्तन में आपको किसी भी तरह डेटाबेस को बदलना होगा। उदाहरण के लिए, आपके उपयोगकर्ताओं के संपर्क फोन को VARCHAR
पर एक अलग प्रारूप में संग्रहीत करने की आवश्यकता नहीं है, लेकिन देश कोड, क्षेत्र कोड और फोन नंबर के लिए तीन SMALLINT
कॉलम हैं।
ठीक है, वर्तमान डेटा लाने के लिए एक क्वेरी को समझना इतना मुश्किल नहीं है, इसे तीन मानों में अलग करें और उन्हें वापस डालें। वह तब होता है जब माइग्रेशन खेल में आते हैं: आप अपने नए फ़ील्ड बना सकते हैं, फिर ट्रांसफॉर्म करें और अंत में उस डेटा को छोड़ दें जो पहले डेटा धारण कर रहा था।
और इससे भी ज्यादा! जब आप अपने माइग्रेशन में किए गए परिवर्तनों को पूर्ववत करने की आवश्यकता होती है, तो आप पिछली प्रक्रिया (down
माइग्रेशन) का वर्णन भी कर सकते हैं। मान लीजिए कि किसी ने कहीं VARCHAR
फ़ील्ड के प्रारूप पर भारी निर्भर किया है, और अब जब आपने संरचना बदल दी है, तो कोड का उसका टुकड़ा अपेक्षित काम नहीं कर रहा है। तो, आप migration:down
चलाते हैं, और सब कुछ वापस हो जाता है। इस विशिष्ट मामले में आप पुराने VARCHAR
कॉलम को वापस लाएंगे और मानों को वापस जोड़ देंगे, और फिर फ़ील्ड्स को छोड़ दें।
सिद्धांत का माइग्रेशन टूल मूल रूप से आपके लिए अधिकांश काम करता है। जब आप अपनी स्कीमा को अलग करते हैं, तो यह सभी आवश्यक up
और down
की जेनरेट करता है, इसलिए केवल एक चीज जो आपको करना है वह उस डेटा को संभालती है जो माइग्रेशन लागू होने पर क्षतिग्रस्त हो सकती है।
इसके अलावा, माइग्रेशन कुछ ऐसा है जो आपके टीम के ज्ञान पर अन्य डेवलपर्स को अपने स्कीमा को अपडेट करने का समय देता है। केवल schema-tool
के साथ, आपके टीम के साथी को प्रत्येक बार खींचने पर doctrine:schema:update
चलाने होंगे, क्योंकि वे नहीं जानते होंगे कि स्कीमा वास्तव में बदल गया है या नहीं।
माइग्रेशन का उपयोग करते समय, आप हमेशा देखते हैं कि माइग्रेशन फ़ोल्डर में कुछ अपडेट हैं, जिसका अर्थ है कि आपको अपनी स्कीमा अपडेट करने की आवश्यकता है।
बहुत अच्छा जवाब, इसे और अधिक स्पष्ट रूप से नहीं कर सकता :) – Wcool
@Wcool, धन्यवाद :) – kix
बहुत उपयोगी उत्तर। बहुत बहुत धन्यवाद। –