افزودن کلید خارجی در Laravel Migration

13 خرداد 1398, خواندن در 3 دقیقه

لاراول واقعا در مدیریت و پیمایش رابطه های جداول بخوبی کار میکنه, شما باید نحوه پیکربندی اولیه این رابطه ها رو قبل از استفاده ازشون, بدونید.

ما برای این کار از مثال TODOParrot که رابطه بین لیست TODO و دسته بندی های منتسب رو بیان میکنه, استفاده می کنیم.

مثال TODOParrot

این یک پروژه آزمایشی برای لاراول کارهای تازه وارد هست و ازش در این آموزش بعنوان پروژه ی پایه مون استفاده می کنیم. این پروژه شامل قالب های blade, مدل های رابطه ای, سازگاری فرم ها, رابطه های Eloquent, متدهای مدل, Unit testing و قابلیت های دیگر است و میتونه پروژه پایه ی خوبی برای یک آموزش باشه. 

برای دریافت این پروژه از این لینک اقدام کنید.

پیاده سازی 

 هر لیست به یک دسته بندی وابسته هست, و هر دسته بندی میتونید تعداد زیادی لیست داشته باشه. این یعنی جدول todolists یک کلید خارجی بنام category_id دارد. در این آموزش به شما نشان می دهیم قدم های ضروری برای پیکربندی این رابطه belongs to / has many با استفاده از migration ها و رابطه مدل ها به چه صورتی هستند. بیایید اول migration رو بسازیم :

php artisan make:migration add_category_id_to_todolists --table=todolists

اسم migration رو میتونید به دلخواه انتخاب کنید اما بهتون پیشنهاد میکنم طوری نامگذاری کنید که بعدا بتونید براحتی متوجه بشید که این فایل قراره چه کاری انجام بده. بعد از اجرای دستور فوق فایلی ایجاد میشه که قسمت اول اسمش تاریخ و قسمت بعدی اسمی هست که رویش گذاشتید. فایل مورد نظر در مسیر database/migrations ساخته میشه. وقتی این فایل رو باز کنید متوجه متدهای معمول up و down خواهید شد. پس تغییرات زیر رو اعمال کنید :

public function up()
{
    Schema::table('todolists', function(Blueprint $table)
    {
        $table->integer('category_id')->unsigned()->after('id');
        $table->foreign('category_id')->references('id')->on('categories');
    });
}

فقط دو خط شامل متد up میشه, خط اول یک ستون بنام category_id میسازه که از نوع unsigned integer هست. این رو دقیقا بعد از ستون id قرار میدیم. اما این ترتیب ها زیاد مهم نیستند, من دوست دارم کلیدهای اصلی و خارجی رو بالای جدول قرار بدم.

خط دوم تعیین میکنه که این ستون جدید یک کلید خارجی باشه و مشخص میکنه که به جدول categories و ستون id ارجاع پیدا کنه.

برای متد down هم به شکل زیر عمل می کنیم :

public function down()
{
    Schema::table('todolists', function(Blueprint $table)
    {

        $table->dropForeign('todolists_category_id_foreign');
        $table->dropColumn('category_id');

    });
}

این دو خط خیلی مرموز نیستند, ممکنه بخواهیم migration رو برگردونیم, ارجاع کلید خارجی و ستون کلید خارجی حذف خواهند شد.

اجرای Migration 

بعد از ذخیره سازی تغییرات, migration رو اجرا کنید :

php artisan migrate
Migrated: 2016_03_30_152547_add_category_id_to_todolists.php

با بروزرسانی شمای جدول, شما باید مدل های Category و Todolist رو هم بروز کنید. با مدل Catrgory.php آغاز می کنیم و متد زیر رو بهش می افزاییم :

public function lists()
{
    return $this->hasMany('App\Todolist');
}

تغییرات رو ذخیره کرده و فایل مدل Todolist.php رو باز کنید و متد زیر رو اضافه کنید :

public function Category()
{
    return $this->belongsTo('App\Category');
}

با این تغییرات شما آماده ی استفاده از این رابطه ها هستید. اگر می خواهیم درمورد رابطه ها و Migration ها در لاراول بیشتر بدانید, از این کتاب استفاده کنید.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
امیررضا سیستانه ای @reza.sys
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو