عنوان مقاله :

آموزش Migration ها در لاراول

گردآوری و تالیف : حسام موسوی
تاریخ انتشار : 14 اردیبهشت 1394
دسته بندی ها : لاراول , آموزشی

Database Migrations در لاراول

اینو بگم که لاراولی که برای معرفی Migration ازش استفاده میکنیم نسخه 5 می باشد . 

لاراول توسط Taylor Otwell توسعه پیدا کرده و یکی از بزرگترین فریمورک های php  می باشد و هم برای پروژه ای کوچیک و هم برای پروژه های در مقیاس بزرگ قابل استفاده است و همینطور دارای یه جامعه بزرگی از توسعه دهنده ها هم می باشد . من با لاراول حدود 1سال پیش زمانی که تو گوگل "بهترین فریمورک پی اچ پی" رو سرچ میکردم آشنا شدم و بعد چند ماه شروع به استفاده از اون کردم و از آشنایی با لاراول اصلا پیشمون نیستم هیچ ، خیلی خیلی هم خوشحالم . 

خب بریم سراغ معرفی اجزایی قدرتمند لاراول از جمله : یک سیستم مسیریابی قدرتمند و انعطاف پذیر، Eloquent ORM ، دارای بخشی برای احراز هویت ، موتور قالب سازی Blade ، ابزار رابط خط فرمان به اسم Artisan ، یک query ساز سازنده و گویا . ( منو ببخشید اگه تو این لیست چیز دیگه ای رو جا گذاشتم).

خب حالا بریم سراغ Migrations در لاراول : 

Migrations در لاراول یه راه آسون رو برای مدیریت پایگاه داده نرم افزار شما فراهم میکنه . وقتی شما از Migrations استفاده میکنید بسیار از وظایف database schema رو میتونید به سادگی هر چه تمام تر آنجام بدید . با استفاده از Migrations شما میتونید جداول دیتابیستونو به راحتی ایجاد و تغییر بدید بصورتی که دیگه از دست mysql به کل خلاص بشین و اگه بلد نباشین مشکلی براتون بوجود نیاد . 

راه اندازی Migrations : 

قبل از اینکه ما بخواین اولین migration خودمونو بسازیم ما نیاز داریم یه جدول به اسم migration تو بانک اطلاعاتیمون داشته باشیم تا اسم جدول های که بوجود میاریم یا عملیات دیگه توش ذخیره بشه . شما اینکارو میتونید با وارد کردن دستور artisan migrate:install در خط فرمان خودمتون انجام بدید . 

┌─[usm4n@usm4n-desktop]―[~/laravel5]
└─•artisan migrate:install
Migration table created successfully

بوجود آوردن جداول دیتابیسمون با استفاده از Migration :

در حال حاضر  ، فرض کنید ما میخوایم یه جدول برای برنامه امون تو پایگاه داده بسازیم به اسم 'articles' . اولین چیزی که ما نیاز داریم ایجاد یه کلاس با نام 'articles' ( البته عملا شما هر اسمی میتونید براش انتخاب کنید ) و قرار دادن اون تو کلاس و بعد قرار دادن فایل کلاس در بخش Migration پروژمون که این بخشو در /Database/Migrations قرار داره . 

عصبی نشید اصلا احتیاج به این همه کار نیست . ما این کارا رو میتوین فقط با دستور artisan make:migration articles --table=articles در خط فرمان انجان بدیم .

┌─[usm4n@usm4n-desktop]―[~/laravel5]
└─•artisan make:migration articles --table=articles
Created Migration: 2015_05_04_223728_articles
Generating optimized class loader

بخشی ‘2015_05_04_223728′ یه مهر زمانی برای فایله که به عنوان بخشی از اسم فایل رو فایل قرار میگیره . که بعدا تو سیستم migration برای پیگیری تغییرات ازش استفاده میشه . بنابراین به شما توصیه میشه که حتما برای بوجود آوردن کلاس migration  از دستور بالا استفاده کنید . 

کد تولید شده تو فایل بالایی که ساختیم یه چی شبیه کد پایینه : 

در واقع با این کد ها باعث تغییرات در پایگاه دادمون میشیم ، ما با استفاده از دستور  artisan migrate در خط فرمان متد up از همه ای کلاس های Migration که در دایرکتوری database/migrations قرار داره رو فراخونی میکنه . و اگه بخوایم همه کارایی رو که کردیم برگشت بدیم به سادگی از دستور  artisan migrate:rollback در خط فرمان استفاده میکنیم کار این دستور اینکه متد Down که تو Migration هامون وجود داره رو فراخونی میکنه . معمولا کد های که تو Down نوشته میشه جنبه حذف داره .  بنابراین ما با استفاده از متد های up و Down عملیات لازمی که برای جداول تهیه دیدیم رو اجرا میکنیم . 

برای دیدن تابع های Schema که لاراول تهیه کرده میتونید به این صفحه مراجعه کنید (اینجا)

خب حالا کدی که ما برای migration Articles نیاز داریم :

بعد از تغییرات تو فایل migration Articles ما نیاز داریم تا اونو اجرایی کنیم به همین خاطر از دستور artisan migrate در خط فرمان استفاده میکنیم و بعد از کامل شدن ، جدول ما باید یه چیزی شبیه شکل زیر باشه.

mysql> describe articles;
+-------------+------------------+------+-----+---------------------+----------------+
| Field       | Type             | Null | Key | Default             | Extra          |
+-------------+------------------+------+-----+---------------------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| title       | varchar(50)      | NO   |     | NULL                |                |
| description | varchar(255)     | NO   |     | NULL                |                |
| created_at  | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at  | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+-------------+------------------+------+-----+---------------------+----------------+
5 rows in set (0.00 sec)

همونطور که قبلا نوشتم آجرای دستور  artisan migrate:rollback باعث میشه که متد down تو کلاس های migration فراخونی بشن . بنابراین هر چیزی که تو کلاس های migration  و تو این متد ها استفاده بشه هم قابل اجرا هم قابل بازگشت است . 

کد زیر رو ببینید :

renameColumn('description','explanation');
        });
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('articles', function(Blueprint $table)
        {
            $table->renameColumn('explanation','description');
        });
    }
 
}

 

هنگامی که ما migration بالا رو با استفاده از دستور  artisan migrate مورد استفاده قرار میدیم . نام ستون ‘description’ به ‘explanation’ پیدا میکنه . بطور مشابه با استفاده از دستور artisan migrate:rollback نام ستون از ‘explanation’ به ‘description’ تغییر پیدا میکنه . تعجب نکردین که چقدر ساده میشه کارامون با استفاده از migration .

خب از شما دوستان عزیز ممنونم که تا اینجایی این مقاله همراه ما بودید . اگه نظر ،پیشنهاد ، انتقادی از ما دارید خوشحال میشیم که اونو تو بخش نظرات باهامون در میون بزارید . 

با تشکر .  

برچسب : ,

مقالات پیشنهادی

چک کردن ویوها در لاراول

لاراول در هر ورژنی که بیرون میده ، معمولا چند تابع جدید به عنوان helper هم به سیستم خودش اضافه میکنه تا کار توسعه دهندها رو ساده تر کنه . در این پست س...

دیباگ کردن اپلیکیشن های لاراولی با لاراول Debugbar

پکیج لاراول دیباگر توسط شخصی به نام Barry vd. Heuvel منتشر شده که به شما اجازه میده خیلی سریع و راحت اطلاعات اپلیکیشن لاراولی خودتون رو در یک رابطه گر...

یه لقمه نون و لاراول

در این مقاله کوتاه میخواهم در مورد برخی از موضوعاتی در لاراول صحبت کنم که واقعا کسانی که خواهان کار با لاراول هستند باید این موارد را بدانند . بارها و...

فیلتر کردن نتایج query ها با شروط مختلف

شاید عنوان این مطلب برای شما کمی گیج کننده باشه ، اما بزارید براتون با یک مثال سادش کنم شما دارای لیستی از مشتری هستید و اونا رو با دستور Customer::al...

دیدگاه های ارزشمند شما

حسام | 9 ماه پیش

درود بر شما, عالی هستید,

محمدرضا | 2 سال پیش

ممنون از زحماتتون . بسیار عالی بود. فقط میشه به جای migration از همون mysql استفاده کرد؟

محمدرضا | 2 سال پیش

خیلی ممنون لطفا ادامه بدید . وبسایت خیلی خوبی هم دارید موفق باشید

admin | 2 سال پیش

سلام ، بله میشه اما با migration میاد کاراتونو خیلی خیلی ساده میکنه یعنی دیتابیس هاتون که با migration آماده شد وقتی پروژه تونو تو هاست آپلود کردین خودش بطور خودکار دیتابیستونو رو میسازه و پروژتون آماده به کار میشه . برای همین migration خیلی بهتر از نوشتن mysql و پیشنهاد میکنم حتما migration کار کنی وگرنه مشکلی نداره میتونی mysql هم کار کنی .