عنوان مقاله :

آموزش 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 .

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

با تشکر .  

برچسب : ,

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

بررسی اولیه Laravel Horizon

Laravel Horizon یک نرم افزار متن باز هست که صف های Redis لاراول رو با یک داشبورد زیبا و سیستم پیکربندی کدمحور همراه میکنه. داشبورد Horizon یک اپلیکیشن...

کمکی های جدید لاراول در نسخه 5.5

کمکی های جدید String دارند راهشون رو به سمت لاراول از طریق ریلیز بزرگ 5.5 پیدا می کنند.اینجا می خواهیم به چند نقطه برجسته در کلاس های کمکی String اخیر...

ساخت سیستم برچسب گذاری در پروژه لاراول

در سال‌های اخیر سیستم Tagging (برچسب گذاری) راه محبوبی برای دسته بندی آیتم ها شده, شما میتونید این سیستم رو در اکثر اپلیکیشن ها ببینید, از بلاگ ها گرف...

میخواهم لاراول یاد بگیرم

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

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

برای ارسال نظر لازم است ابتدا وارد سایت شوید
فرشاد | 5 ماه پیش

سلام و خسته نباشید
سوالی داشتم درمورد migration ها خب من سه تا migration ساختم و در migration دوم یک رابطه ایجاد کردم ولی زمانی که migrate رو انجام میدم خطا میده و میگه هنوز جدول user وجود نداره که من بهش رابطه بزنم
برای پیاده سازی رابطم باید چیکار کنم

خیلی ممنون از آموزش هاتون

حسام موسوی | 5 ماه پیش

من نمی دونم شما چیکار کردید ولی اگر به یک رابطه نیاز دارید قبلش باید اول جدول مورد نظر مثلا در اینجا user ساخته بشه و بعد رابطه ایجاد کنید

حسام | 1 سال پیش

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

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

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

admin | 2 سال پیش

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

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

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