Yii - डेटाबेस माइग्रेशन

डेटाबेस-संचालित एप्लिकेशन के विकास के दौरान, डेटाबेस संरचना स्रोत कोड के साथ विकसित होती है। Yii प्रदान करता हैdatabase migration वह सुविधा जो आपको डेटाबेस परिवर्तनों का ट्रैक रखने की अनुमति देती है।

Yii निम्नलिखित माइग्रेशन कमांड लाइन टूल प्रदान करता है -

  • नए माइग्रेशन बनाएं
  • माइग्रेशन वापस लाएं
  • माइग्रेशन लागू करें
  • माइग्रेशन फिर से लागू करें
  • माइग्रेशन स्थिति और इतिहास दिखाएं

प्रवासन बनाना

आइए हम एक नया डेटाबेस माइग्रेशन बनाएं।

Step 1 - बेसिक एप्लिकेशन टेम्प्लेट के प्रोजेक्ट रूट के अंदर कंसोल विंडो खोलें और रन करें।

./yii migrate/create add_news_table

उपरोक्त कमांड एक नई माइग्रेशन फ़ाइल बनाएगी (m160113_102634_add_news_table.php इस मामले में) migrations फ़ोल्डर।

फ़ाइल में निम्न कोड है -

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_102634_add_news_table extends Migration {
      public function up() {
   
      }
      public function down() {
         echo "m160113_102634_add_news_table cannot be reverted.\n";
         return false;
      }
      /*
      // Use safeUp/safeDown to run migration code within a transaction
      public function safeUp() {
 
      }
      public function safeDown() {
   
      }
      */
   }
?>

प्रत्येक DB माइग्रेशन एक PHP वर्ग है जिसका विस्तार है yii\db\Migrationकक्षा। वर्ग का नाम निम्नलिखित प्रारूप में उत्पन्न होता है -

m<YYMMDD_HHMMSS>_<Name>

कहाँ पे <YYMMDD_HMMSS> UTC डेटाटाइम है जिस पर माइग्रेशन कमांड निष्पादित किया गया था और <Name> कंसोल कमांड में आपके द्वारा प्रदान किया गया तर्क है।

जब आप अपने डेटाबेस को अपग्रेड करते हैं तो अप () विधि को लागू किया जाता है, जबकि डाउन () विधि को डाउनग्रेड करते समय कहा जाता है।

Step 2 - डेटाबेस में एक नई तालिका जोड़ने के लिए, माइग्रेशन फ़ाइल को इस तरह से संशोधित करें।

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_102634_add_news_table extends Migration {
      public function up() {
         $this->createTable("news", [ "id" => Schema::TYPE_PK, "title" => Schema::TYPE_STRING, "content" => Schema::TYPE_TEXT, ]); } public function down() { $this->dropTable('news');
      }
      /*
      // Use safeUp/safeDown to run migration code within a transaction
      public function safeUp() {
	
      }
      public function safeDown() {

      }
      */
   }
?>

उपरोक्त कोड में हमने एक नई तालिका बनाई, जिसे समाचार कहा गया up() विधि और में इस तालिका को गिरा दिया down() तरीका।

newsतालिका में तीन फ़ील्ड होते हैं: आईडी, शीर्षक और सामग्री। तालिका या स्तंभ बनाते समय हमें अमूर्त प्रकारों का उपयोग करना चाहिए ताकि माइग्रेशन डेटाबेस प्रकार से स्वतंत्र हो। उदाहरण के लिए, MySQL के मामले में, TYPE_PK को int (11) NOT NUL AUTO_INCREMETN PRIMARY KEY में बदल दिया जाएगा।

Step 3 - डेटाबेस को अपग्रेड करने के लिए, इस कमांड को रन करें।

./yii migrate

उपरोक्त आदेश उन सभी उपलब्ध माइग्रेशनों को सूचीबद्ध करेगा जिन्हें अभी तक लागू नहीं किया गया है। फिर, यदि आप माइग्रेशन लागू करने की पुष्टि करते हैं, तो यह सभी नए माइग्रेशन कक्षाओं में सेफअप () या अप () चलाएगा।

Step 4 - केवल तीन उपलब्ध माइग्रेशन लागू करने के लिए, आप दौड़ सकते हैं।

./yii migrate 3

Step 5 - आप एक विशेष माइग्रेशन को भी परिभाषित कर सकते हैं जिसे डेटाबेस को माइग्रेट किया जाना चाहिए।

# माइग्रेशन निर्दिष्ट करने के लिए टाइमस्टैम्प का उपयोग करना

yii migrate/to 160202_195501

# स्ट्रिंग का उपयोग करके जिसे स्ट्रैटोटाइम द्वारा पार्स किया जा सकता है ()

yii migrate/to "2016-01-01 19:55:01"

# पूर्ण नाम का उपयोग करना

yii migrate/to m160202_195501_create_news_table

# UNIX टाइमस्टैम्प का उपयोग करना

yii migrate/to 1393964718

Step 6 - माइग्रेशन को वापस करने के लिए (नीचे निष्पादित करें) (या सुरक्षितडाउन () विधियों), चलाएं।

./yii migrate/down

Step 7 - हाल ही में लागू किए गए सबसे अधिक पांच प्रवासों को वापस करने के लिए, आप दौड़ सकते हैं।

./yii migrate/down 5

Step 8 - फिर से करना (फिर से लागू करें और फिर से लागू करें) माइग्रेशन, चलाएं।

./yii migrate/redo

पहले से लागू माइग्रेशन को सूचीबद्ध करने के लिए, इन कमांड का उपयोग करें -

  • yii migrate/new # पहले 10 नए पलायन दिखाता है

  • yii migrate/new 3 # पहले 3 नए पलायन दिखाता है

  • yii migrate/new all # सभी नए पलायन दिखाता है

  • yii migrate/history # अंतिम 10 लागू प्रवासियों को दर्शाता है

  • yii migrate/history 20 # पिछले 20 लागू प्रवासियों को दर्शाता है

  • yii migrate/history all # सभी लागू माइग्रेशन दिखाता है

कभी-कभी आपको किसी विशिष्ट तालिका से स्तंभ जोड़ने या छोड़ने की आवश्यकता होती है। आप उपयोग कर सकते हैंaddColumn() तथा dropColumn() तरीकों।

Step 1 - नया माइग्रेशन बनाएं।

./yii migrate/create add_category_to_news

Step 2 - इस तरह से नई बनाई गई माइग्रेशन फ़ाइल को संशोधित करें।

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_110909_add_category_to_news extends Migration {
      public function up() {
         $this->addColumn('news', 'category', $this->integer());
      }
      public function down() {
         $this->dropColumn('news', 'category');
      }
   }
?>

अब, अगर तुम दौड़ो ./yii migrate, श्रेणी स्तंभ को समाचार तालिका में जोड़ा जाना चाहिए। इसके विपरीत, यदि आप चलाते हैं./yii migrate/down 1, श्रेणी कॉलम को छोड़ दिया जाना चाहिए।

डीबी माइग्रेशन करते समय, यह सुनिश्चित करना महत्वपूर्ण है कि प्रत्येक माइग्रेशन सफल या असफल हो गया है। किसी लेन-देन में डीबी संचालन को संलग्न करने की सिफारिश की जाती है। ट्रांसेक्शनल माइग्रेशन को लागू करने के लिए, आपको बस माइग्रेशन कोड डालना चाहिएsafeUp() तथा safeDown()तरीकों। यदि इन विधियों में कोई भी ऑपरेशन विफल हो जाता है, तो पिछले सभी ऑपरेशन वापस चालू हो जाएंगे।

"लेन-देन के तरीके" में पिछला उदाहरण होगा -

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_110909_add_category_to_news extends Migration {
      public function safeUp() {
         $this->addColumn('news', 'category', $this->integer()); } public function safeDown() { $this->dropColumn('news', 'category');
      }
   }
?>

yii\db\Migration वर्ग डेटाबेस में हेरफेर करने के लिए निम्नलिखित तरीके प्रदान करता है -

  • execute() - एक कच्चा एसक्यूएल स्टेटमेंट निष्पादित करता है

  • createTable() - एक टेबल बनाता है

  • renameTable() - एक तालिका का नाम

  • insert() - एक पंक्ति में सम्मिलित करता है

  • batchInsert() - कई पंक्तियों को सम्मिलित करता है

  • update() - अद्यतन पंक्तियाँ

  • delete() - पंक्तियों को हटाता है

  • addColumn() - एक कॉलम जोड़ता है

  • renameColumn() - एक कॉलम का नाम बदल देता है

  • dropColumn() - एक कॉलम निकालता है

  • alterColumn() - एक कॉलम को बदल देता है

  • dropTable() - एक टेबल निकालता है

  • truncateTable() - एक तालिका में सभी पंक्तियों को निकालता है

  • createIndex() - एक सूचकांक बनाता है

  • dropIndex() - एक इंडेक्स निकालता है

  • addPrimaryKey() - एक प्राथमिक कुंजी जोड़ता है

  • dropPrimaryKey() - एक प्राथमिक कुंजी निकालता है

  • addForeignKey() - एक विदेशी कुंजी जोड़ता है

  • dropForeignKey() - एक विदेशी कुंजी निकालता है