खोज…
माइग्रेशन
लारवेल में अपने डेटाबेस को नियंत्रित करने के लिए माइग्रेशन का उपयोग करना है। कारीगर के साथ प्रवास बनाएँ:
php artisan make:migration create_first_table --create=first_table
यह क्लास CreateFirstTable उत्पन्न करेगा। अप विधि के अंदर आप अपने कॉलम बना सकते हैं:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFirstTable extends Migration
{
public function up()
{
Schema::create('first_table', function (Blueprint $table) {
$table->increments('id');
$table->string('first_string_column_name');
$table->integer('secont_integer_column_name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('first_table');
}
}
अपने सभी माइग्रेशन वर्गों को चलाने के लिए अंत में आप कारीगर कमांड चला सकते हैं:
php artisan migrate
यह आपके डेटाबेस में आपके टेबल और आपके कॉलम बनाएगा। अन्य उपयोगी माइग्रेट कमांड हैं:
-
php artisan migrate:rollback
- अंतिम डेटाबेस माइग्रेशन को रोलबैक करें -
php artisan migrate:reset
- रोलबैक सभी डेटाबेस माइग्रेशन -
php artisan migrate:refresh
- रीसेट करें और सभी माइग्रेशन फिर से चलाएँ -
php artisan migrate:status
- प्रत्येक प्रवास की स्थिति दिखाएँ
मौजूदा तालिकाओं को संशोधित करना
कभी-कभी, आपको स्तंभों का renaming/deleting
जैसी अपनी मौजूदा तालिका संरचना को renaming/deleting
। जिसे आप एक नया माइग्रेशन बनाकर पूरा कर सकते हैं। और अपने माइग्रेशन के up
मेथड में।
//Renaming Column.
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('email', 'username');
});
}
उपर्युक्त उदाहरण से users table
का username
email column
users table
नाम बदल जाएगा। जबकि नीचे का कोड users
तालिका से एक कॉलम username
छोड़ता है।
Improtant: कॉलम को संशोधित करने के लिए आप जोड़ने की जरूरत doctrine/dbal
परियोजना के लिए निर्भरता composer.json
फ़ाइल और रन composer update
बदलाव को प्रतिबिंबित करने के लिए।
//Droping Column
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('username');
});
}
माइग्रेशन फ़ाइलें
एक Laravel 5 अनुप्रयोग में database/migrations
निर्देशिका में रहते हैं। उनके फ़ाइलनाम एक विशेष प्रारूप के अनुरूप हैं:
<year>_<month>_<day>_<hour><minute><second>_<name>.php
एक माइग्रेशन फ़ाइल को किसी विशेष समस्या को हल करने के लिए एक स्कीमा अद्यतन का प्रतिनिधित्व करना चाहिए। उदाहरण के लिए:
2016_07_21_134310_add_last_logged_in_to_users_table.php
डेटाबेस माइग्रेशन को कालानुक्रमिक क्रम में रखा जाता है ताकि लारवेल को पता चले कि उन्हें किस क्रम में निष्पादित करना है। लारवेल हमेशा सबसे पुराने से लेकर सबसे नए तक के पलायन को अंजाम देंगे।
माइग्रेशन फ़ाइलें जनरेट कर रहा है
हर बार सही फ़ाइलनाम के साथ एक नई माइग्रेशन फ़ाइल बनाना, जब आपको अपना स्कीमा बदलने की आवश्यकता होती है, तो आप एक काम करेंगे। शुक्र है, लारवेल की artisan
कमान आपके लिए प्रवासन उत्पन्न कर सकती है:
php artisan make:migration add_last_logged_in_to_users_table
आप उपरोक्त कमांड के साथ --table
और --create
झंडे का भी उपयोग कर सकते हैं। ये वैकल्पिक और बस सुविधा के लिए हैं, और संबंधित बॉयलरप्लेट कोड को माइग्रेशन फ़ाइल में सम्मिलित करेंगे।
php artisan make:migration add_last_logged_in_to_users_table --table=users
php artisan make:migration create_logs_table --create=logs
आप --path
विकल्प का उपयोग करके उत्पन्न माइग्रेशन के लिए एक कस्टम आउटपुट पथ निर्दिष्ट कर सकते हैं। पथ अनुप्रयोग के आधार पथ के सापेक्ष है।
php artisan make:migration --path=app/Modules/User/Migrations
एक डेटाबेस माइग्रेशन के अंदर
प्रत्येक माइग्रेशन में एक up()
विधि और एक down()
विधि होनी चाहिए। up()
विधि का उद्देश्य डेटाबेस स्कीमा को अपनी नई स्थिति में लाने के लिए आवश्यक संचालन करना है, और down()
विधि का उद्देश्य up()
विधि द्वारा किए गए किसी भी संचालन को उल्टा करना है। यह सुनिश्चित करना कि down()
विधि सही ढंग से आपके ऑपरेशन को उलट देती है, डेटाबेस स्कीमा परिवर्तन रोलबैक करने में सक्षम होने के लिए महत्वपूर्ण है।
एक उदाहरण माइग्रेशन फ़ाइल इस तरह दिख सकती है:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddLastLoggedInToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dateTime('last_logged_in')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('last_logged_in');
});
}
}
इस माइग्रेशन को चलाने के दौरान, Laravel आपके डेटाबेस के विरुद्ध चलने के लिए निम्न SQL उत्पन्न करेगा:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
पलायन चल रहा है
एक बार जब आपका माइग्रेशन लिखा जाता है, तो इसे चलाने से आपके डेटाबेस पर परिचालन लागू होगा।
php artisan migrate
यदि सब ठीक रहा, तो आपको नीचे जैसा ही आउटपुट दिखाई देगा:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
जब आप उत्पादन वातावरण में माइग्रेशन चला रहे हों, तो लारवेल यह जानने में काफी चतुर है। यदि यह पता लगाता है कि आप एक विनाशकारी प्रवासन कर रहे हैं (उदाहरण के लिए, वह जो किसी तालिका से स्तंभ हटाता है), तो php artisan migrate
कमांड आपसे पुष्टिकरण मांगेगा। लगातार वितरण वातावरण में यह नहीं चाहते हो सकता है। उस स्थिति में, पुष्टि को छोड़ने के लिए --force
ध्वज का उपयोग करें:
php artisan migrate --force
यदि आपने केवल माइग्रेशन चलाया है, तो आप अपने डेटाबेस में migrations
टेबल की उपस्थिति को देखकर भ्रमित हो सकते हैं। यह सारणी वही है जो लारवेल पहले से चलाए जा रहे प्रवासों पर नज़र रखने के लिए उपयोग करता है। migrate
कमांड जारी करते समय, लारवेल यह निर्धारित करेगा कि माइग्रेशन को अभी तक क्या चलना है, और फिर उन्हें कालानुक्रमिक क्रम में निष्पादित करें, और फिर migrations
टेबल को सूट करने के लिए अपडेट करें।
जब तक आप पूरी तरह से नहीं जानते कि आप क्या कर रहे हैं, आपको मैन्युअल रूप से migrations
टेबल को कभी भी संपादित नहीं करना चाहिए। अनजाने में अपने डेटाबेस को एक टूटी हुई स्थिति में छोड़ना बहुत आसान है जहां आपके माइग्रेशन विफल हो जाएंगे।
रोलिंग बैक माइग्रेशन
क्या हो अगर आप लेटेस्ट माइग्रेशन यानी हालिया ऑपरेशन को रोलबैक करना चाहते हैं, तो आप कमाल का rollback
कमांड इस्तेमाल कर सकते हैं। लेकिन याद रखें कि यह कमांड केवल अंतिम माइग्रेशन को ही रोल करता है, जिसमें कई माइग्रेशन फाइलें शामिल हो सकती हैं
php artisan migrate:rollback
यदि आप अपने सभी एप्लिकेशन माइग्रेशन को वापस करने में रुचि रखते हैं, तो आप निम्नलिखित कमांड का उपयोग कर सकते हैं
php artisan migrate:reset
इसके अलावा यदि आप मेरी तरह आलसी हैं और एक कमांड के साथ रोलबैक और माइग्रेट करना चाहते हैं, तो आप इस कमांड का उपयोग कर सकते हैं
php artisan migrate:refresh
php artisan migrate:refresh --seed
आप step
विकल्प के साथ रोलबैक करने के लिए चरणों की संख्या भी निर्दिष्ट कर सकते हैं। जैसे यह 1 स्टेपबैक करेगा।
php artisan migrate:rollback --step=1